2016-07-17 12 views
-1

Nach meinem Wissen über Sammlung Framework, wenn wir ein Objekt bei der Einfügung zu sortieren, können wir TreeMap verwenden, und diese Objektklasse sollte compareTo() Methode der vergleichbaren Klasse überschreiben.Sortieren Objekt beim Einfügen in HashMap

Aber ich möchte wissen, ist es eine Möglichkeit, durch die wir das gleiche Ergebnis in HashMap erreichen kann? Gibt es ein Dienstprogramm, mit dem es beim Einfügen von Objekten sortiert werden kann?

Vielen Dank im Voraus.

+4

Nein, 'HashMap' ist keine sortierte Karte, es implementiert sogar nicht 'SortedMap'. –

Antwort

0

Nein, HashMap ist keine sortierte Karte von Design, es implementiert auch nicht SortedMap Schnittstelle. Siehe HashMap javadocs

EDIT (aus dem Kommentar unten)

Seit TreeMap es sortiert ist, müssen Sie entweder Comparable Schlüssel verwenden oder bieten eine Comparator Implementierung zu einem Konstruktor finden TreeMap javadocs

+0

Danke, aber was ich will weiß, gibt es einen alternativen Weg, um diese oder jede Utility-Bibliothek zu erreichen – JRishi

+1

Die berühmteste Alternative ist 'TreeMap'. Da es sortiert ist, müssen Sie entweder 'Comparable'-Schlüssel verwenden oder einem Konstruktor eine' Comparator'-Implementierung bereitstellen, siehe ['TreeMap' javadocs] (https://docs.oracle.com/javase/8/docs/api/ Java/util/TreeMap.html) –

+0

Warum downvote ??? –

-1

Nein, HashMap ist eine unsortierte Datenstruktur.

+0

Gibt es eine alternative oder Dienstprogramm-Bibliothek, um das zu erreichen? – JRishi

+0

Sie können eine 'TreeMap' anstelle von' HashMap' verwenden (javadoc: https://docs.oracle.com/javase/8/docs/api/java/util/TreeMap.html) – erosb

1

nicht TreeMap fallen lassen zu schnell! TreeMap ermöglicht die Verwendung einer Comparator anstelle der compareTo() Methode.

import java.util.Comparator; 
import java.util.TreeMap; 

public class Person { 
    private int age; 

    public static class AgeComperator implements Comparator { 

     @Override 
     public int compare(Object top, Object bottom) { 

      return ((Person) top).age - ((Person) bottom).age; 
     } 
    } 

    public Person(int age) { 
     this.age = age; 
    } 

    public static void main(String[] args) { 
     TreeMap<Person, String> map = new TreeMap(new AgeComperator()); 
     map.put(new Person(18), "True"); 
     map.put(new Person(29), "False"); 
     System.out.println(map.keySet().iterator().next().age); 
    } 

} 

Wie Sie sehen können, hat Person keine compareTo -Methode.

+0

Bitte lesen Sie die Frage sorgfältig. Die Frage wurde nach 'HashMap' gestellt:" Gibt es einen Weg, durch den wir dasselbe in ** HashMap ** erreichen können? " Ihr Beitrag (über 'TreeMap') liefert also keine Antwort auf die ursprüngliche Frage. –

+0

Ok, verstanden. BTW, ich erwähnte die gleiche Anmerkung zu Komparator in der Kommentar zu meiner Antwort, aber jemand hat es abgelehnt. Die Welt ist unfair :(Du antwortest hat einen Tippfehler in 'Comperator' Wort, es sollte' Comparator' sein :) Fange einen Upvote! :) –

+0

@VladimirVagaytsev Ja, der Verweigerer war 'Comunity (admin)' Ich sah die Bearbeitung von Ihnen und stimme total zu Ihrer Bearbeitung und entledigen Sie die Ablehnung von dem Benutzer Community! Oh, ich denke, es war ein gleichzeitiges Update, und community hat die Arbeit nicht übernommen, um diese Änderungen zusammenzuführen. –