Wie erstelle ich eine Liste eindeutiger / eindeutiger Objekte (keine Duplikate) in Java?
Im Moment HashMap<String, Integer>
mache ich das, da der Schlüssel überschrieben wird und wir am Ende bekommen können, HashMap.getKeySet()
was einzigartig wäre. Aber ich bin sicher, es sollte einen besseren Weg geben, dies zu tun, da der Wertteil hier verschwendet wird.
quelle
Ich möchte hier einige Dinge für das Originalplakat klarstellen, auf die andere angespielt, aber nicht wirklich explizit angegeben haben. Wenn Sie sagen, dass Sie eine eindeutige Liste möchten, ist dies genau die Definition eines geordneten Satzes. Einige andere wichtige Unterschiede zwischen der Set-Schnittstelle und der List-Schnittstelle bestehen darin, dass Sie mit List den Einfügeindex angeben können. Die Frage ist also, ob Sie die Listenschnittstelle wirklich benötigen (dh für die Kompatibilität mit einer Bibliothek eines Drittanbieters usw.), oder ob Sie Ihre Software für die Verwendung der Set-Schnittstelle neu gestalten können. Sie müssen auch überlegen, was Sie mit der Schnittstelle tun. Ist es wichtig, Elemente anhand ihres Index zu finden? Wie viele Elemente erwarten Sie in Ihrem Set? Wenn Sie viele Elemente haben möchten, ist die Bestellung wichtig?
Wenn Sie wirklich eine Liste benötigen, die nur eine eindeutige Einschränkung hat, gibt es die Apache Common Utils-Klasse org.apache.commons.collections.list.SetUniqueList, die Ihnen die List-Schnittstelle und die eindeutige Einschränkung bereitstellt. Wohlgemerkt, dies bricht jedoch die List-Oberfläche. Sie erhalten jedoch eine bessere Leistung, wenn Sie die Liste nach Index durchsuchen müssen. Wenn Sie mit der Set-Schnittstelle umgehen können und einen kleineren Datensatz haben, ist LinkedHashSet möglicherweise ein guter Weg. Es hängt nur vom Design und der Absicht Ihrer Software ab.
Auch hier hat jede Sammlung bestimmte Vor- und Nachteile. Einige schnelle Einfügungen, aber langsame Lesevorgänge, andere schnelle Lesevorgänge, aber langsame Einfügungen usw. Es ist sinnvoll, viel Zeit mit der Sammlungsdokumentation zu verbringen, um die feineren Details jeder Klasse und Schnittstelle vollständig kennenzulernen.
quelle
Verwenden Sie
new HashSet<String>
ein Beispiel:quelle
Sie können einfach eine verwenden
HashSet<String>
, um eine Sammlung eindeutiger Objekte zu verwalten. Wenn dieInteger
Werte in Ihrer Karte wichtig sind, können Sie stattdessen mithilfe dercontainsKey
Kartenmethode testen, ob sich Ihr Schlüssel bereits in der Karte befindet.quelle
HashSet<String>
(oder) jedeSet
Implementierung kann die Arbeit für Sie erledigen.Set
Duplikate nicht zulassen.Hier ist Javadoc für HashSet.
quelle
Ich weiß nicht, wie effizient dies ist, aber für mich in einem einfachen Kontext gearbeitet.
quelle
Möglicherweise möchten Sie eine der implementierenden
java.util.Set<E>
Schnittstellenklassen verwenden, zjava.util.HashSet<String>
. B. die Auflistungsklasse.quelle