PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : java HashMap


Gast
2011-03-18, 17:30:19
Hallo,

ich habe eine ArrayList als Value von einer HashMap. Das Problem ist,
dass die Reihenfolge der Elemente, die in der ArrayList drin sind, sich verändert.


ArrayList<bla> list=hashmap.get(key);
if(list==null)
{

list=new ArrayList<bla>();
transaction.put(key, list);
}
list.add(bla);

Wenn ich jetzt mit list.get(0) mir ein Element ausgeben lassen will, ist die Reihenfolge jedesmal anders, obwohl ArrayList laut Spezifikation Elemente immer ans Ende einfügt.

Hat jemand eine Idee warum dies so ist?

Misda
2011-03-18, 18:32:47
Gib mal bitte ein vollständig lauffähiges Beispiel an :-)

Shink
2011-03-18, 18:36:05
Hat jemand eine Idee warum dies so ist?
Du hast einen Fehler eingebaut den du in diesem Beispiel nicht angegeben hast.:freak:

Misda
2011-03-18, 18:39:50
Deswegen ja was lauffähiges ^^

Benutzt du vielleicht Threads? Da müsstest du dich um das Thema Synchronisierung kümmern (z.B. indem du passende Datenstrukturen verwendest).

Gast
2011-03-18, 18:59:27
Ich habe mich schlecht ausgedrückt.Die Reihenfolge ist nicht jedes Mal anders, sondern nachdem ich einen Wert in die ArrayList eingefügt habe , ist die Position 0 nicht gleich. Es gibt Threads, aber der angebene Teil ist nicht betroffen. Ich greife auch nur von einer Klasse drauf zu. Die Debugausgaben habe ich in die selbe Methode gepackt.

An der HashMap liegt es jedenfalls nicht, selbst wenn ich nur die ArrayList nehme kommt zu dem gleichen Problem.

@Shink

Nein, habe ich nicht. Das war schon der ganze Teil des Codes. Ich rufe die Methode, in welchem der Code steht, mehrmals auf und die Parameter sind auch alle in der richtigen Reihenfolge, nur die 0te Position stimmt nicht,
weswegen ich mich eben wundere.

Lauffähigen Code kann ich leider nicht liefern, da zuviele interne jars verwendet werden, die ich nicht ausliefern darf.

PatkIllA
2011-03-18, 19:04:04
Es gibt Threads, aber der angebene Teil ist nicht betroffen. Ich greife auch nur von einer Klasse drauf zu. Dass nur von einer Klasse darauf zugegriffen wird schließt da überhaupt nichts aus.

Misda
2011-03-18, 19:16:32
Könnte trotzdem ein Problem mit der Synchronisierung sein.

Lies mal in der API ( http://download.oracle.com/javase/6/docs/api/java/util/ArrayList.html ) den Part durch, der bei "Note that this implementation is not synchronized." steht.

Oder benutze eine Datenstruktur aus http://download.oracle.com/javase/6/docs/api/java/util/concurrent/package-summary.html .

Gast
2011-03-18, 19:53:28
An der Datenstruktur liegt es auch nicht. Ich habe gerade einmal einen
bla [] Array erstellt mit einer Zählvariablen, die nur einmal den Wert 0 hat und trotzdem passiert das gleiche. Ich kann mir aber nicht vorstellen, dass etwas bei den Referenzen falsch ist *wunder* Davor hatte ich andere Concurrent Datenstrukturen probiert.

Gast
2011-03-18, 19:58:06
Es lag an den Referenzen.