我在Java中有一个Hashtable,想迭代表中的所有值,并在迭代时删除一个特定的键值对。
怎么可能这样做?
答案 0 :(得分:42)
您需要使用显式java.util.Iterator
来迭代Map
的条目集,而不是能够使用Java 6中提供的增强型For循环语法。以下示例遍历a 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();
}
}
答案 1 :(得分:41)
您可以使用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);
}
答案 2 :(得分:6)
您可以使用临时删除列表:
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);
}
您可以在Java API
中找到有关Hashtable方法的更多信息答案 3 :(得分:6)
您是否知道要提前删除的键值对?这样做更清楚,然后:
table.delete(key);
for (K key: table.keySet()) {
// do whatever you need to do with the rest of the keys
}