2013-06-11 2 views
-2

Может ли любой орган помочь мне, предоставив ответ на примере, как удалить записи из HashMap во время доступа к записям.Как управлять HashMap при доступе?

+0

[Что вы пробовали] (http://mattgemmell.com/2008/12/08/what-have-you-tried/) к тому же просят нас? –

+3

Что именно вы подразумеваете под «во время доступа к записям»? Мы говорим о нескольких потоках (используйте ConcurrentHashMap) или при повторении записей (используйте Iterator.remove)? –

ответ

1

Использование ConcurrentHashMap

Хэш таблица поддерживает полный параллелизм извлечений и регулируемой ожидаемой параллелизм для обновлений.

Вот хороший example

0

Через записей итератора:

Map<String, String> myMap = new HashMap<String, String>(); 
myMap.put("test", "test1"); 
myMap.put("test2", "test2"); 
Iterator<Entry<String, String>> it = myMap.entrySet().iterator(); 
while(it.hasNext()) { 
    if("test".equals(it.next().getKey())) { 
     it.remove(); 
    } 
} 
0

Самый простой способ для перебора на копии ключей:

final Map<String, Integer> map = new HashMap<String, Integer>(); 
map.put("test", 0); 
map.put("removeMe", 1); 
map.put("dontRemoveMe", 2); 
for (final String key : map.keySet().toArray(new String[map.keySet().size()])) 
    if (key.startsWith("remove")) 
     map.remove(key); 

Но если ваш Map больше, чем несколько записей, вы можете столкнуться с плохими показателями, и вы можете использовать iterator удалить:

final Iterator<Entry<String, Integer>> iter = map.entrySet().iterator(); 
while (iter.hasNext()) 
    if (iter.next().getKey().startsWith("remove")) 
     iter.remove();