In einer Java Map Integer, Double [], muss ich Double [] nach dem Abrufen und Ändern einfügen?

8

Eine kurze Frage, die vielleicht lahm ist.

Im folgenden Code:

%Vor%

Ist die letzte Anweisung "dataMap.put" notwendig? Oder wird dataMap.get (1) einen Verweis auf das Array liefern, das dann direkt in den späteren Anweisungen geändert wird.

Ich weiß, dass Map.get () bei veränderbaren Objekten (zB Map) den Verweis auf das gewünschte Objekt liefert, allerdings mit einem Array von Doubles (deren Elementtyp zB Double unveränderlich ist) Ich bin mir nicht sicher, ob ich einen Verweis auf das Array in der Karte bekomme.

Danke!

    
obaqueiro 27.07.2011, 12:34
quelle

2 Antworten

17

Nein, die abschließende Anweisung ist nicht erforderlich - weil die Map nur Referenzen auf Arrays enthält, wie Sie bereits erwähnt haben. Ein Array ist ein veränderbares Objekt, obwohl Double es nicht ist - es ist wie ein Objekt mit einer setName(String) -Methode - nur weil String unveränderlich ist, ist der Containertyp nicht.

Beachten Sie, dass ein anderer Thread 1 die Hälfte die Änderung (dh die Einstellung des ersten Elements auf 100) sehen kann, ohne dass das zweite Element auf gesetzt ist 200. Ist das okay? Wenn nicht, könnten Sie darüber nachdenken, stattdessen ein neues Array zu erstellen:

%Vor%

1 Dies setzt voraus, dass Sie natürlich eine thread-sichere Map verwenden, mit ...

    
Jon Skeet 27.07.2011, 12:34
quelle
1

Das Double selbst ist unveränderlich, aber das ist irrelevant für das Array.

Denken Sie an jede Double als eine unzerstörbare Box. Obwohl die Boxen unzerstörbar sind, können Sie sie dennoch wegwerfen und durch etwas anderes ersetzen, was Ihr Inventar angeht.

    
tskuzzy 27.07.2011 12:38
quelle

Tags und Links