迭代和刪除時發生並發修改異常
在進行並發修改(例如刪除元素)時迭代HashMap 時,可能會出現ConcurrentModationExceptionModationException發生。這是因為迭代器對映射的內部引用因修改而失效。
使用ArrayList 的初始解決方案
避免此異常的一種常見方法是建立副本使用new ArrayList(map.keySet()) 取得地圖的鍵集。但是,這種方法會建立不必要的鍵副本,效率可能會很低。
使用迭代器進行刪除
更有效的解決方案是迭代映射的條目使用迭代器,它允許我們安全地刪除元素。映射的entrySet()方法傳回一組條目,每個條目都有一個getKey()和getValue()方法。
範例程式碼:
Map<String, String> map = new HashMap<>(); map.put("test", "test123"); map.put("test2", "test456"); for (Iterator<Map.Entry<String, String>> it = map.entrySet().iterator(); it.hasNext();) { Map.Entry<String, String> entry = it.next(); if (entry.getKey().equals("test")) { it.remove(); } }
在此範例中,我們迭代地圖的條目並安全地刪除「test」鍵。迭代器處理對映射內部結構的必要修改,防止 ConcurrentModificationException。
以上是迭代時如何安全地從 HashMap 刪除元素?的詳細內容。更多資訊請關注PHP中文網其他相關文章!