У меня есть Hashtable в Java и хочу перебирать все значения в таблице и удалять определенную пару "ключ-значение" во время итерации.
Как это можно сделать?
У меня есть Hashtable в Java и хочу перебирать все значения в таблице и удалять определенную пару "ключ-значение" во время итерации.
Как это можно сделать?
Вам нужно использовать явный java.util.Iterator
для итерации по набору элементов Map
, а не для использования расширенного синтаксиса For-loop, доступного на 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();
}
}
Вы можете использовать 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);
}
Значит, вы знаете пару ключей, значение, которую вы хотите удалить заранее? Это гораздо более ясное, чтобы сделать это, а затем:
table.delete(key);
for (K key: table.keySet()) {
// do whatever you need to do with the rest of the keys
}
Вы можете использовать список временных исключений:
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