2011-05-23 16 views
124

String, String numarasını içeren testMap adlı HashMap adıyorum. haritayı yineleme zaman value belirtilen dize ile maç iseÜzerinde yineleme yaparken HashMap bir anahtar nasıl kaldırılır?

HashMap<String, String> testMap = new HashMap<String, String>(); 

, ben haritadan anahtarını kaldırmak gerekir.

yani

for(Map.Entry<String, String> entry : testMap.entrySet()) { 
    if(entry.getValue().equalsIgnoreCase("Sample")) { 
    testMap.remove(entry.getKey()); 
    } 
} 

testMap"Sample" içeriyor ama HashMap anahtarı kaldırmak kuramıyorum.
yerine alma hatası:

"Exception in thread "main" java.util.ConcurrentModificationException 
    at java.util.HashMap$HashIterator.nextEntry(Unknown Source) 
    at java.util.HashMap$EntryIterator.next(Unknown Source) 
    at java.util.HashMap$EntryIterator.next(Unknown Source)" 
+1

hep kopyalayın/yapıştırın kod parçalarını, kullanılan kod yerine türü daha 'gibi bir şey'. Gösterilen orijinal kod, çalışma zamanı istisnası atamıyor çünkü bu, tamamlanmamıştı. –

+1

Diğer bir seçenek ise, cludgy ise, yinelemek istediğinizde kaldırmak istediğiniz nesnelerin bir listesini oluşturmaktır. Daha sonra, ilk döngüden sonra bu listeyi tekrarlayan ve bunları hashmap'tan kaldıran başka bir döngü oluşturabilirsiniz. – eipark

cevap

242

Dene:

Iterator<Map.Entry<String,String>> iter = TestMap.entrySet().iterator(); 
while (iter.hasNext()) { 
    Map.Entry<String,String> entry = iter.next(); 
    if("Sample".equalsIgnoreCase(entry.getValue())){ 
     iter.remove(); 
    } 
} 
Java 1.8 ile

ve sonrası sadece tek satırda yukarıdaki yapabilirsiniz:

TestMap.entrySet().removeIf(entry -> !TestMap.contains("Sample")); 
+3

Yineleyicinizin açık olmadığı bir öğeyi kaldırmak isterseniz ne yapmalısınız? – HDave

+6

@HDave "Map.remove (Object key)" gibi bir yöntem kullanmak mümkündür, ancak yineleme sırasında yapılmamalıdır. Yineleme sırasında 'Iterator.remove()' dışındaki herhangi bir kaldırma yöntemini kullanırsanız, yinelemenin sonuçları tanımsızdır. Yineleyiciyi kaldırmak ve 'Iterator.remove() 'kullanmak istediğiniz girdiyi" açık "olana kadar veya yineleme döngüsü dışında (önce/sonra) yapın. İkincisiyse, önceki yineleyici tanımlanmamış sonuçlar vereceğinden, harita üzerinde herhangi bir yineleme yapmadan önce giriş kümesinden yeni bir yineleyici aldığınızdan emin olun. –

+1

Veya benzer bir semantik ile bir 'for' döngü kullanabilirsiniz, bkz http://stackoverflow.com/a/1884916/32453 – rogerdpack

-30

için hashmap kullanımından belirli anahtarı ve elemanı kaldırın

hashmap.remove(key) 

tam kaynak kodu

import java.util.HashMap; 
public class RemoveMapping { 
    public static void main(String a[]){ 
     HashMap hashMap = new HashMap(); 
     hashMap.put(1, "One"); 
     hashMap.put(2, "Two"); 
     hashMap.put(3, "Three"); 
     System.out.println("Original HashMap : "+hashMap); 
     hashMap.remove(3); 
     System.out.println("Changed HashMap : "+hashMap);   
    } 
} 

Kaynak gibidir: http://www.tutorialdata.com/examples/java/collection-framework/hashmap/remove-mapping-of-specified--key-from-hashmap

+1

Tüm sorumu okumadınız – Stefan

İlgili konular