Die Leistung der TreeMap, HashMap und LinkedHashMap?
In der TreeMap - Elemente sind sortiert
In HashMap - Elemente sind nicht sortiert
So, wenn ich bedenke get
, put
und remove
Methoden, welche Karte sollte ich für die Leistung?
- Finden Sie in der Javadoc.
HashMap
angegeben ist, werden O(1): 'Konstante Leistung für die grundlegenden Operationen (get und put), vorausgesetzt, die hash-Funktion verteilt die Elemente richtig zu den Eimer'.TreeMap
angegeben wird, um " garantiert log(n) Zeit Kosten für diecontainsKey
,get
,put
undremove
Operationen. - Ohne zu wissen, Ihre Kriterien für die Beurteilung, welche option besser wäre, diese Frage zu beantworten ist unmöglich. Klar, wenn Sie eine geordnete Sammlung nur
TreeMap
tun. Aber Sie wissen bereits, dass. - Ziemlich detailliert hier: difference-between-hashmap-linkedhashmap-and-treemap
- Die akzeptierte Antwort sagt
HashMap
schneller ist. Aber die Javadocs fürLinkedHashMap
(Java 8) sagt, dass es geht deutlich schneller alsHashMap
. Also YMMV, je nach Ihren spezifischen Kriterien. Definitiv nicht verwendenTreeMap
es sei denn, Sie benötigen Sie Sortieren, und verwenden SieLinkedHashMap
zu bewahren, insertion um.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwenden
HashMap
es sei denn, Sie haben ein Bedürfnis für die Bestellung.HashMap
ist schneller.Sagte, Sie kann es einfach machen zu wechseln, indem Sie über die generische Schnittstelle, die als Ihre Erklärung:
Dann alles, was Sie tun müssen ist, wechseln Sie eine Stelle und der code verwendet die neue Karte geben.
Edit:
Eine einfache timing-test:
O(1)
fortgeführten arbeiten pro Betrieb, vorausgesetzt, dass eine gute hash-Funktion. Rot-schwarz-Bäume sindO(lg n)
Arbeit pro Betrieb.HashMap
und 90 msec für eineTreeMap
. Ich poste meinen code.Es hängt davon ab, wie schnell sich der hash und Vergleich die Funktionen sind auf den Tasten in der Karte angezeigt. Es hängt davon ab, ob Sie mehr daran interessiert, in der durchschnittlichen Fall Leistung oder worst-case-performance. Es hängt davon ab, ob Sie eine gute hash-Funktion angewendet, um Ihre Karte, Schlüssel, hash-Werte sollten gut verteilt die Hashfunktion die domain (ja, es hängt von Ihren Daten).
Im Allgemeinen (wenn Sie kann nicht sein belästigt, um zu testen), eine hash-map ist oft eine gute Antwort, aber es ist auch unwahrscheinlich, dass es einen großen Unterschied machen, wenn Sie nicht über eine Tausende von Einträgen (für kleine Größen, eine "vec-Karte" kann auch gut funktionieren).