Ist es sicher, einen HashMap-Schlüssel / Wert während der Iteration zu ändern?

8

Ich habe eine HashMap. Ich durchlaufe die Karte so:

%Vor%

Ist die Art, wie ich die Karte verwende, sicher? Sicher in dem Sinne, dass die Map aufgrund der Iteration nicht beschädigt wird.

    
Jack Twain 16.07.2013, 21:43
quelle

3 Antworten

2

Es ist eine vollkommen sichere Operation, die Sie ausführen, da Sie nur den Wert eines vorhandenen Schlüssels in der Map ändern.

Wenn Sie jedoch jemals einen Eintrag aus Map löschen wollen, denken Sie daran, Iterator zu verwenden.

    
anubhava 16.07.2013, 21:51
quelle
8

Sie könnten Ihren Code effizienter schreiben als:

%Vor%

Dies ist eine Mikrooptimierung, aber manchmal ist es wichtig, und Sie verlieren nichts. Es ist kürzer und klärt jede Unklarheit über die Sicherheit auf!

    
Steven Schlansker 16.07.2013 23:07
quelle
7

Wie Sie in HashMap-Quellcode , die put -Methode ändert nur die modCount , wenn ein neuer Schlüssel bereitgestellt wird. modCount wird vom Iterator verwendet, um nach Änderungen zu suchen. Wenn eine solche Änderung zwischen zwei Aufrufen des next() eines Iterators aufgetreten ist, wird ein ConcurrentModificationException ausgelöst. Dies bedeutet, dass Sie put mit sicher verwenden.

    
Kaushik Shankar 16.07.2013 22:14
quelle

Tags und Links