Перебор и удаление из Hashtable в Java - PullRequest
37 голосов
/ 28 февраля 2010

У меня есть Hashtable в Java, и я хочу перебрать все значения в таблице и удалить конкретную пару ключ-значение во время перебора.

Как это можно сделать?

Ответы [ 4 ]

42 голосов
/ 28 февраля 2010

Вам нужно использовать явный java.util.Iterator для перебора набора записей Map, а не использовать расширенный синтаксис цикла For, доступный в Java 6. В следующем примере выполняется перебор по Map Integer, String пар, удаляя все записи, чей ключ Integer равен нулю или равен 0.

Map<Integer, String> map = ...

Iterator<Map.Entry<Integer, String>> it = map.entrySet().iterator();

while (it.hasNext()) {
  Map.Entry<Integer, String> entry = it.next();

  // Remove entry if key is null or equals 0.
  if (entry.getKey() == null || entry.getKey() == 0) {
    it.remove();
  }
}
41 голосов
/ 04 сентября 2012

Вы можете использовать Enumeration:

Hashtable<Integer, String> table = ...

Enumeration<Integer> enumKey = table.keys();
while(enumKey.hasMoreElements()) {
    Integer key = enumKey.nextElement();
    String val = table.get(key);
    if(key==0 && val.equals("0"))
        table.remove(key);
}
6 голосов
/ 28 февраля 2010

То есть вы знаете пару ключ-значение, которую хотите удалить заранее? Тогда гораздо понятнее это сделать:

 table.delete(key);
 for (K key: table.keySet()) {
    // do whatever you need to do with the rest of the keys
 }
6 голосов
/ 28 февраля 2010

Вы можете использовать временный список удаления:

List<String> keyList = new ArrayList<String>;

for(Map.Entry<String,String> entry : hashTable){
  if(entry.getValue().equals("delete")) // replace with your own check
    keyList.add(entry.getKey());
}

for(String key : keyList){
  hashTable.remove(key);
}

Более подробную информацию о методах Hashtable можно найти в Java API

...