Wie sortiere ich eine Java Hashtable?

7

Ich habe einige Daten in eine Java Hashtable eingefügt. Wenn ich die Daten von der Hashtable lese, kommt sie nicht in der Reihenfolge zurück, in der ich sie eingefügt habe. Wie bekomme ich die geordneten Daten von der Hashtable?

Ich verwende den folgenden Code, um die Werte aus der Hashtabelle zu erhalten:

%Vor%     
Tester 02.12.2010, 09:04
quelle

7 Antworten

20
___ qstnhdr ___ Wie sortiere ich eine Java Hashtable? ___ qstntxt ___

Ich habe einige Daten in eine Java Hashtable eingefügt. Wenn ich die Daten von der Hashtable lese, kommt sie nicht in der Reihenfolge zurück, in der ich sie eingefügt habe. Wie bekomme ich die geordneten Daten von der Hashtable?

Ich verwende den folgenden Code, um die Werte aus der Hashtabelle zu erhalten:

%Vor%     
___ answer4333310 ___

A LinkedHashMap hat keine vorhersagbare Iterationsreihenfolge und kann nicht sortiert werden. Wenn Sie nur eine vorhersagbare Iterationsreihenfolge wünschen, sollten Sie eine k . Wenn Sie Ihre m sortieren möchten, sollten Sie eine m.put(k, v) .

    
___ answer11524480 ___

Obwohl ein m.containsKey(k) nicht sortiert werden kann, fragt er, wie man Daten sortiert, indem man die Liste der aus HashMap extrahierten Schlüssel sortiert und Werte in dieser Reihenfolge abruft. Etwas wie:

%Vor%

geht es gut.

    
___ antwort4333298 ___

Verwenden Sie TreeMap zum Sortieren:

%Vor%     
___ antwort4333281 ___
  

Wenn ich die Daten aus der Hash-Tabelle lese   es kommt nicht in der gleichen Reihenfolge wie   Ich habe eingefügt.

Ihre Frage ergibt keinen Sinn. Eine Hashtabelle hat keine "Reihenfolge", sie ist ungeordnet (Bearbeiten: Einige Implementierungen haben eine Reihenfolge, aber eine Hashtabelle ist nicht üblich) ..

In welcher Reihenfolge würden Sie die Einträge erwarten?

Wenn Sie Elemente in einer bestimmten Reihenfolge speichern möchten, müssen Sie eine Liste verwenden (z. B. eine Unterklasse von java.util.List).

Und übrigens, Ihr Codebeispiel enthält nicht einmal eine Hash-Tabelle.

    
___ tag123sorting ___ Das Sortieren ist der Vorgang, bei dem eine Reihenfolge auf eine Objektgruppe angewendet wird. ___ tag123java ___ Java (nicht zu verwechseln mit JavaScript oder JScript oder JS) ist eine universelle objektorientierte Programmiersprache, die für die Verwendung in Verbindung mit der Java Virtual Machine (JVM) entwickelt wurde. "Java-Plattform" ist der Name für ein Computersystem, auf dem Tools zum Entwickeln und Ausführen von Java-Programmen installiert sind. Verwenden Sie dieses Tag für Fragen, die sich auf die Java-Programmiersprache oder Java-Plattform-Tools beziehen. ___ tag123maps ___ Eine Karte ist eine visuelle Darstellung eines Bereichs - eine symbolische Darstellung, die Beziehungen zwischen Elementen dieses Raums wie Objekten, Regionen und Themen hervorhebt. ___ answer4333331 ___

Hashtable ist eine Legacy-Sammlung, die 1998 durch Java-1.2-Sammlungen ersetzt wurde. Ich schlage vor, Sie vermeiden es zusammen mit TreeMap und HashMap .

Anstelle von Hashtable verwenden Sie Hashtable , wenn möglich. Sie können die Synchronisation mit ArrayList hinzufügen, wenn Sie sie brauchen.

Anstelle von Vector verwenden Sie TreeMap , wenn möglich. Sie können die Synchronisation mit %code% hinzufügen, wenn Sie sie brauchen.

Anstelle von %code% können Sie %code% oder sogar eine %code% Schleife verwenden.

    
___ tag123hashtable ___ Eine Hash-Tabelle in der Programmierung ist eine Sammlung, die eine Hash-Funktion verwendet, um identifizierende Werte (Schlüssel) ihren zugehörigen Werten zuzuordnen. ___ antwort4333279 ___

Wenn Sie eine bestellungserhaltende Karte wünschen, sollten Sie %code% verwenden. :

  

Hash-Tabelle und verkettete Listenimplementierung der Map-Schnittstelle mit vorhersagbarer Iterationsreihenfolge. Diese Implementierung unterscheidet sich von HashMap insofern, als sie eine doppelt verknüpfte Liste enthält, die alle Einträge durchläuft. Diese verkettete Liste definiert die Iterationsreihenfolge, bei der es sich normalerweise um die Reihenfolge handelt, in der Schlüssel in die Karte eingefügt wurden (Einfügereihenfolge). Beachten Sie, dass die Reihenfolge der Anzeigen nicht betroffen ist, wenn ein Schlüssel erneut in die Karte eingefügt wird. (Ein Schlüssel %code% wird erneut in eine Zuordnung %code% eingefügt, wenn %code% aufgerufen wird, wenn %code% unmittelbar vor dem Aufruf den Wert true zurückgibt.)

     

Diese Implementierung erspart ihren Clients die nicht spezifizierte, in der Regel chaotische Reihenfolge, die von %code% (und %code% ) bereitgestellt wird, ohne die mit %code% verbundenen erhöhten Kosten zu verursachen.

Beachten Sie, dass dies normalerweise mit %code% anstatt mit %code% verglichen wird - ich kenne kein bestellungskonservierendes Äquivalent zu %code% ; letzteres wird heutzutage sowieso nicht verwendet (genauso wie %code% normalerweise vor %code% verwendet wird).

Ich habe angenommen, dass Sie die -Einfügung Reihenfolge und nicht die sortierte Reihenfolge wünschen. Wenn Sie Letzteres möchten, verwenden Sie %code% .

>     
___ answer4333888 ___

Ich habe eine ausgeklügelte Antwort zum Sortieren und zum geordneten Abrufen geschrieben von Maps in dieser vorherigen Frage:

Zugriff auf den letzten Eintrag in einer Karte

    
___
Jon Skeet 02.12.2010, 09:07
quelle
7

A Hashtable hat keine vorhersagbare Iterationsreihenfolge und kann nicht sortiert werden. Wenn Sie nur eine vorhersagbare Iterationsreihenfolge wünschen, sollten Sie eine LinkedHashMap . Wenn Sie Ihre Map sortieren möchten, sollten Sie eine TreeMap .

    
Björn 02.12.2010 09:10
quelle
6

Obwohl ein Hashtable nicht sortiert werden kann, fragt er, wie man Daten sortiert, indem man die Liste der aus HashTable extrahierten Schlüssel sortiert und Werte in dieser Reihenfolge abruft. Etwas wie:

%Vor%

geht es gut.

    
Filippo Mazza 17.07.2012 14:18
quelle
3

Hashtable ist eine Legacy-Sammlung, die 1998 durch Java-1.2-Sammlungen ersetzt wurde. Ich schlage vor, Sie vermeiden es zusammen mit Vector und Enumeration .

Anstelle von Hashtable verwenden Sie HashMap , wenn möglich. Sie können die Synchronisation mit Collections.synchronizedMap(map) hinzufügen, wenn Sie sie brauchen.

Anstelle von Vector verwenden Sie ArrayList , wenn möglich. Sie können die Synchronisation mit Collections.synchronizedList(map) hinzufügen, wenn Sie sie brauchen.

Anstelle von Enumeration können Sie Iterator oder sogar eine for-each Schleife verwenden.

    
Peter Lawrey 02.12.2010 09:13
quelle
2
___ qstnhdr ___ Wie sortiere ich eine Java Hashtable? ___ qstntxt ___

Ich habe einige Daten in eine Java Hashtable eingefügt. Wenn ich die Daten von der Hashtable lese, kommt sie nicht in der Reihenfolge zurück, in der ich sie eingefügt habe. Wie bekomme ich die geordneten Daten von der Hashtable?

Ich verwende den folgenden Code, um die Werte aus der Hashtabelle zu erhalten:

%Vor%     
___ answer4333310 ___

A %code% hat keine vorhersagbare Iterationsreihenfolge und kann nicht sortiert werden. Wenn Sie nur eine vorhersagbare Iterationsreihenfolge wünschen, sollten Sie eine %code% . Wenn Sie Ihre %code% sortieren möchten, sollten Sie eine %code% .

    
___ answer11524480 ___

Obwohl ein %code% nicht sortiert werden kann, fragt er, wie man Daten sortiert, indem man die Liste der aus %code% extrahierten Schlüssel sortiert und Werte in dieser Reihenfolge abruft. Etwas wie:

%Vor%

geht es gut.

    
___ antwort4333298 ___

Verwenden Sie TreeMap zum Sortieren:

%Vor%     
___ antwort4333281 ___
  

Wenn ich die Daten aus der Hash-Tabelle lese   es kommt nicht in der gleichen Reihenfolge wie   Ich habe eingefügt.

Ihre Frage ergibt keinen Sinn. Eine Hashtabelle hat keine "Reihenfolge", sie ist ungeordnet (Bearbeiten: Einige Implementierungen haben eine Reihenfolge, aber eine Hashtabelle ist nicht üblich) ..

In welcher Reihenfolge würden Sie die Einträge erwarten?

Wenn Sie Elemente in einer bestimmten Reihenfolge speichern möchten, müssen Sie eine Liste verwenden (z. B. eine Unterklasse von java.util.List).

Und übrigens, Ihr Codebeispiel enthält nicht einmal eine Hash-Tabelle.

    
___ tag123sorting ___ Das Sortieren ist der Vorgang, bei dem eine Reihenfolge auf eine Objektgruppe angewendet wird. ___ tag123java ___ Java (nicht zu verwechseln mit JavaScript oder JScript oder JS) ist eine universelle objektorientierte Programmiersprache, die für die Verwendung in Verbindung mit der Java Virtual Machine (JVM) entwickelt wurde. "Java-Plattform" ist der Name für ein Computersystem, auf dem Tools zum Entwickeln und Ausführen von Java-Programmen installiert sind. Verwenden Sie dieses Tag für Fragen, die sich auf die Java-Programmiersprache oder Java-Plattform-Tools beziehen. ___ tag123maps ___ Eine Karte ist eine visuelle Darstellung eines Bereichs - eine symbolische Darstellung, die Beziehungen zwischen Elementen dieses Raums wie Objekten, Regionen und Themen hervorhebt. ___ answer4333331 ___

%code% ist eine Legacy-Sammlung, die 1998 durch Java-1.2-Sammlungen ersetzt wurde. Ich schlage vor, Sie vermeiden es zusammen mit %code% und %code% .

Anstelle von %code% verwenden Sie %code% , wenn möglich. Sie können die Synchronisation mit %code% hinzufügen, wenn Sie sie brauchen.

Anstelle von %code% verwenden Sie %code% , wenn möglich. Sie können die Synchronisation mit %code% hinzufügen, wenn Sie sie brauchen.

Anstelle von %code% können Sie %code% oder sogar eine %code% Schleife verwenden.

    
___ tag123hashtable ___ Eine Hash-Tabelle in der Programmierung ist eine Sammlung, die eine Hash-Funktion verwendet, um identifizierende Werte (Schlüssel) ihren zugehörigen Werten zuzuordnen. ___ antwort4333279 ___

Wenn Sie eine bestellungserhaltende Karte wünschen, sollten Sie %code% verwenden. :

  

Hash-Tabelle und verkettete Listenimplementierung der Map-Schnittstelle mit vorhersagbarer Iterationsreihenfolge. Diese Implementierung unterscheidet sich von HashMap insofern, als sie eine doppelt verknüpfte Liste enthält, die alle Einträge durchläuft. Diese verkettete Liste definiert die Iterationsreihenfolge, bei der es sich normalerweise um die Reihenfolge handelt, in der Schlüssel in die Karte eingefügt wurden (Einfügereihenfolge). Beachten Sie, dass die Reihenfolge der Anzeigen nicht betroffen ist, wenn ein Schlüssel erneut in die Karte eingefügt wird. (Ein Schlüssel %code% wird erneut in eine Zuordnung %code% eingefügt, wenn %code% aufgerufen wird, wenn %code% unmittelbar vor dem Aufruf den Wert true zurückgibt.)

     

Diese Implementierung erspart ihren Clients die nicht spezifizierte, in der Regel chaotische Reihenfolge, die von %code% (und %code% ) bereitgestellt wird, ohne die mit %code% verbundenen erhöhten Kosten zu verursachen.

Beachten Sie, dass dies normalerweise mit %code% anstatt mit %code% verglichen wird - ich kenne kein bestellungskonservierendes Äquivalent zu %code% ; letzteres wird heutzutage sowieso nicht verwendet (genauso wie %code% normalerweise vor %code% verwendet wird).

Ich habe angenommen, dass Sie die -Einfügung Reihenfolge und nicht die sortierte Reihenfolge wünschen. Wenn Sie Letzteres möchten, verwenden Sie %code% .

>     
___ answer4333888 ___

Ich habe eine ausgeklügelte Antwort zum Sortieren und zum geordneten Abrufen geschrieben von Maps in dieser vorherigen Frage:

Zugriff auf den letzten Eintrag in einer Karte

    
___
Mohamed Saligh 02.12.2010 09:09
quelle
0
___ qstnhdr ___ Wie sortiere ich eine Java Hashtable? ___ qstntxt ___

Ich habe einige Daten in eine Java Hashtable eingefügt. Wenn ich die Daten von der Hashtable lese, kommt sie nicht in der Reihenfolge zurück, in der ich sie eingefügt habe. Wie bekomme ich die geordneten Daten von der Hashtable?

Ich verwende den folgenden Code, um die Werte aus der Hashtabelle zu erhalten:

%Vor%     
___ answer4333310 ___

A %code% hat keine vorhersagbare Iterationsreihenfolge und kann nicht sortiert werden. Wenn Sie nur eine vorhersagbare Iterationsreihenfolge wünschen, sollten Sie eine %code% . Wenn Sie Ihre %code% sortieren möchten, sollten Sie eine %code% .

    
___ answer11524480 ___

Obwohl ein %code% nicht sortiert werden kann, fragt er, wie man Daten sortiert, indem man die Liste der aus %code% extrahierten Schlüssel sortiert und Werte in dieser Reihenfolge abruft. Etwas wie:

%Vor%

geht es gut.

    
___ antwort4333298 ___

Verwenden Sie TreeMap zum Sortieren:

%Vor%     
___ antwort4333281 ___
  

Wenn ich die Daten aus der Hash-Tabelle lese   es kommt nicht in der gleichen Reihenfolge wie   Ich habe eingefügt.

Ihre Frage ergibt keinen Sinn. Eine Hashtabelle hat keine "Reihenfolge", sie ist ungeordnet (Bearbeiten: Einige Implementierungen haben eine Reihenfolge, aber eine Hashtabelle ist nicht üblich) ..

In welcher Reihenfolge würden Sie die Einträge erwarten?

Wenn Sie Elemente in einer bestimmten Reihenfolge speichern möchten, müssen Sie eine Liste verwenden (z. B. eine Unterklasse von java.util.List).

Und übrigens, Ihr Codebeispiel enthält nicht einmal eine Hash-Tabelle.

    
___ tag123sorting ___ Das Sortieren ist der Vorgang, bei dem eine Reihenfolge auf eine Objektgruppe angewendet wird. ___ tag123java ___ Java (nicht zu verwechseln mit JavaScript oder JScript oder JS) ist eine universelle objektorientierte Programmiersprache, die für die Verwendung in Verbindung mit der Java Virtual Machine (JVM) entwickelt wurde. "Java-Plattform" ist der Name für ein Computersystem, auf dem Tools zum Entwickeln und Ausführen von Java-Programmen installiert sind. Verwenden Sie dieses Tag für Fragen, die sich auf die Java-Programmiersprache oder Java-Plattform-Tools beziehen. ___ tag123maps ___ Eine Karte ist eine visuelle Darstellung eines Bereichs - eine symbolische Darstellung, die Beziehungen zwischen Elementen dieses Raums wie Objekten, Regionen und Themen hervorhebt. ___ answer4333331 ___

%code% ist eine Legacy-Sammlung, die 1998 durch Java-1.2-Sammlungen ersetzt wurde. Ich schlage vor, Sie vermeiden es zusammen mit %code% und %code% .

Anstelle von %code% verwenden Sie %code% , wenn möglich. Sie können die Synchronisation mit %code% hinzufügen, wenn Sie sie brauchen.

Anstelle von %code% verwenden Sie %code% , wenn möglich. Sie können die Synchronisation mit %code% hinzufügen, wenn Sie sie brauchen.

Anstelle von %code% können Sie %code% oder sogar eine %code% Schleife verwenden.

    
___ tag123hashtable ___ Eine Hash-Tabelle in der Programmierung ist eine Sammlung, die eine Hash-Funktion verwendet, um identifizierende Werte (Schlüssel) ihren zugehörigen Werten zuzuordnen. ___ antwort4333279 ___

Wenn Sie eine bestellungserhaltende Karte wünschen, sollten Sie %code% verwenden. :

  

Hash-Tabelle und verkettete Listenimplementierung der Map-Schnittstelle mit vorhersagbarer Iterationsreihenfolge. Diese Implementierung unterscheidet sich von HashMap insofern, als sie eine doppelt verknüpfte Liste enthält, die alle Einträge durchläuft. Diese verkettete Liste definiert die Iterationsreihenfolge, bei der es sich normalerweise um die Reihenfolge handelt, in der Schlüssel in die Karte eingefügt wurden (Einfügereihenfolge). Beachten Sie, dass die Reihenfolge der Anzeigen nicht betroffen ist, wenn ein Schlüssel erneut in die Karte eingefügt wird. (Ein Schlüssel %code% wird erneut in eine Zuordnung %code% eingefügt, wenn %code% aufgerufen wird, wenn %code% unmittelbar vor dem Aufruf den Wert true zurückgibt.)

     

Diese Implementierung erspart ihren Clients die nicht spezifizierte, in der Regel chaotische Reihenfolge, die von %code% (und %code% ) bereitgestellt wird, ohne die mit %code% verbundenen erhöhten Kosten zu verursachen.

Beachten Sie, dass dies normalerweise mit %code% anstatt mit %code% verglichen wird - ich kenne kein bestellungskonservierendes Äquivalent zu %code% ; letzteres wird heutzutage sowieso nicht verwendet (genauso wie %code% normalerweise vor %code% verwendet wird).

Ich habe angenommen, dass Sie die -Einfügung Reihenfolge und nicht die sortierte Reihenfolge wünschen. Wenn Sie Letzteres möchten, verwenden Sie %code% .

>     
___ answer4333888 ___

Ich habe eine ausgeklügelte Antwort zum Sortieren und zum geordneten Abrufen geschrieben von Maps in dieser vorherigen Frage:

Zugriff auf den letzten Eintrag in einer Karte

    
___
sleske 02.12.2010 09:07
quelle

Tags und Links