У меня есть Hashtable в Java, и я хочу перебрать все значения в таблице и удалить определенную пару ключ-значение во время итерации.
Как это можно сделать?
У меня есть Hashtable в Java, и я хочу перебрать все значения в таблице и удалить определенную пару ключ-значение во время итерации.
Как это можно сделать?
Вам необходимо использовать явный java.util.Iterator
для перебора набора записей Map
, а не использовать расширенный синтаксис цикла For, доступный в Java 6. В следующем примере выполняется перебор Map
из пар Integer
, String
, удаляя все записи, чей ключ Integer
имеет значение null или равно 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();
}
}
null
ключей в Hashtable
. Вот что отличает его от Map
. Кроме того, вы запрашиваете Map.Entry getValue
в приведенном выше коде вместо getKey
. Вы не можете сделать entry.getValue() == 0
, потому что значения имеют тип String
.
- person polygenelubricants; 28.02.2010
Hashtable
, потому что это то, что есть у OP. А @Steve, HashMap
, допускает нули (java.sun .com/javase/6/docs/api/java/util/HashMap.html).
- person polygenelubricants; 28.02.2010
entry.getValue()
(который имеет тип String
) вместо entry.getKey()
(который имеет тип Integer).
- person polygenelubricants; 28.02.2010
getValue()
возвращает String
. Строка не может сравниваться с числом 0.
- person polygenelubricants; 28.02.2010
Вы можете использовать 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);
}
Вы можете использовать временный список удаления:
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< /а>
Итак, вы знаете пару ключ-значение, которую хотите удалить заранее? Просто гораздо понятнее сделать это, тогда:
table.delete(key);
for (K key: table.keySet()) {
// do whatever you need to do with the rest of the keys
}