2016-11-16 3 views
0

У меня есть HashMap:Удалить запись из HashMap

public static Map<String, Set<String>> adjMap = new HashMap<String, Set<String>>(); 
adjMap.put(title, new HashSet<String>()); 
adjMap.get(title).add(cutTitle(graphLink)); 

Теперь я хочу сделать удалить все записи из значений (HashSet), который не содержит в качестве ключа.

Вот мой код до сих пор:

for(String s: adjMap.keySet()){ 
    for(Set<String> s1: adjMap.values()){ 
     for(String s2: s1){ 
      if(!s.contains(s2)){ 
       s1.remove(s2); 
      } 
     } 
    } 
} 

Но я получаю исключение:

Исключение в потоке "главный" java.util.ConcurrentModificationException

+0

Вы пытаетесь модифицировать цикл Hashset в Foreach отдельно от своего собственного итератора. –

+0

Используйте 'ConcurrentHashMap' вместо' HashMap' –

ответ

0

Я думаю, что для -Каким петлям не разрешается изменять итерированный объект. Чтобы удалить записи, вы должны использовать итератор.

Сравните с map-Iteration для примера.

2

Итерация вашей карты

Iterator it = adjMap.entrySet().iterator(); 
    while (it.hasNext()) 
    { 
     Entry item = it.next(); 
     map.remove(item.getKey()); 
    } 
0

Вы можете использовать ConcurrentHashMap вместо этого, или создать копию HashMap и внести изменения в копию.

Смежные вопросы