ArrayMap versus HashMap [geschlossen]

9

Was ist der Hauptunterschied zu org.apache.myfaces.trinidad.util.ArrayMap und java.util.HashMap ?

Ist ArrayMap threadsicher?

In der Dokumentation wird erwähnt, dass Array in der Leistung am besten ist.

Ich möchte nicht hashmap oder gleichzeitig hashmap verwenden. Ich möchte andere wie unten versuchen. Welches ist die beste Alternative Wenn ich Thread-Sicherheit und Leistung in Betracht ziehe?

%Vor%     
Sachin M 18.10.2013, 04:07
quelle

1 Antwort

-1

HashMap verwendet ein Array darunter, so dass es niemals schneller sein kann, als ein Array korrekt zu verwenden.

Random.nextInt() ist um ein Vielfaches langsamer als das, was Sie testen. Selbst die Verwendung eines Arrays zum Testen eines Arrays wird Ihre Ergebnisse verzerren. Der Grund dafür, dass Ihr Array so langsam ist, liegt an den Gleich-Vergleichen, nicht am Array-Zugriff selbst.

Ein ArrayList implementiert das Interface List und ein HashMap implementiert das Interface Map . Die eigentliche Frage ist also, wann Sie eine Liste verwenden möchten und wann Sie eine Karte verwenden möchten. Hier hilft die Java-API-Dokumentation sehr.

Liste:

Eine geordnete Sammlung (auch bekannt als Sequenz). Der Benutzer dieser Schnittstelle hat eine genaue Kontrolle darüber, wo in der Liste jedes Element eingefügt wird. Der Benutzer kann auf Elemente über ihren ganzzahligen Index (Position in der Liste) zugreifen und nach Elementen in der Liste suchen.

Karte:

Ein Objekt, das Schlüsselwerten Werte zuordnet. Eine Karte darf keine doppelten Schlüssel enthalten. Jeder Schlüssel kann höchstens einem Wert zugeordnet werden.

Die Listenschnittstelle (ArrayList) ist eine geordnete Sammlung von Objekten, auf die Sie mit einem Index zugreifen, ähnlich wie ein Array (im Fall von ArrayList , wie der Name schon sagt, ist es nur ein Array im Hintergrund). Sie würden ArrayList verwenden, wenn Sie die Objekte in sortierter Reihenfolge speichern möchten (die Reihenfolge, in der sie hinzugefügt werden, oder die Position in der Liste, die Sie beim Hinzufügen des Objekts angeben).

Die HashMap -Implementierung verwendet den Hash-Wert des Schlüsselobjekts, um zu ermitteln, wo sie gespeichert ist. Daher gibt es keine Garantie mehr für die Reihenfolge der Werte. Es gibt jedoch andere Klassen in der Java-API, die dies bereitstellen können, z. LinkedHashMap , das nicht nur eine Hash-Tabelle zum Speichern der Schlüssel / Wert-Paare verwendet, sondern auch eine Liste (LinkedList) der Schlüssel in der Reihenfolge, in der sie hinzugefügt wurden, sodass Sie immer wieder auf die Elemente in der Reihenfolge zugreifen können hinzugefügt (wenn nötig).

Wann sollten Arrays verwendet werden?

Unterschätze niemals Arrays. Meistens, wenn wir eine Liste von Objekten verwenden müssen, neigen wir dazu, über Vektoren oder Listen nachzudenken. Wenn die Größe der Auflistung jedoch bereits bekannt ist und sich nicht ändern wird, kann ein Array als potenzielle Datenstruktur betrachtet werden. Der Zugriff auf Elemente eines Arrays ist schneller als ein Vektor oder eine Liste. Das ist offensichtlich, denn Sie brauchen nur einen Index. Es gibt keinen Overhead für einen zusätzlichen get-Methodenaufruf.

Manchmal ist es am besten, eine Kombination der oben genannten Ansätze zu verwenden. Beispielsweise könnten Sie eine ArrayList von HashMap verwenden, um eine bestimmte Anforderung zu erfüllen.

    
GrIsHu 18.10.2013, 05:41
quelle