Java中哈希表的迭代和删除

Java中哈希表的迭代和删除,java,iterator,hashtable,Java,Iterator,Hashtable,我在Java中有一个哈希表,希望迭代表中的所有值,并在迭代时删除一个特定的键值对 如何做到这一点?您需要使用显式的java.util.Iterator来迭代映射的条目集,而不是使用java 6中可用的增强For循环语法。下面的示例迭代整数,字符串对的映射,删除其整数键为null或等于0的任何条目 Map<Integer, String> map = ... Iterator<Map.Entry<Integer, String>> it = map.entry

我在Java中有一个哈希表,希望迭代表中的所有值,并在迭代时删除一个特定的键值对


如何做到这一点?

您需要使用显式的
java.util.Iterator
来迭代
映射的条目集,而不是使用java 6中可用的增强For循环语法。下面的示例迭代
整数
字符串
对的
映射
,删除其
整数
键为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();
  }
}
Map=。。。
迭代器it=map.entrySet().Iterator();
while(it.hasNext()){
Map.Entry=it.next();
//如果键为null或等于0,则删除条目。
if(entry.getKey()==null | | entry.getKey()==0){
it.remove();
}
}

您可以使用临时删除列表:

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);
}
List keyList=newarraylist;
for(Map.Entry:hashTable){
if(entry.getValue().equals(“delete”)//替换为您自己的检查
添加(entry.getKey());
}
用于(字符串键:键列表){
hashTable.remove(键);
}

您可以在

中找到有关哈希表方法的更多信息,以便了解要提前删除的键、值对?这样做更清楚,那么:

 table.delete(key);
 for (K key: table.keySet()) {
    // do whatever you need to do with the rest of the keys
 }

您可以使用
枚举

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.keys();
while(enumKey.hasMoreElements()){
整数key=enumKey.nextElement();
字符串val=table.get(键);
如果(key==0&&val.equals(“0”))
表.删除(键);
}

哈希表中不能有
null
键。这就是它与
地图的不同之处。此外,您正在上述代码中查询
Map.Entry getValue
,而不是
getKey
。您不能执行
entry.getValue()==0
,因为值的类型为
String
@polygene,Map是一个对null没有限制的接口。HashMap是一个不允许空值的映射实现。我在代码中不引用Hashtable,也不会使用它,因为它被HashMap取代(它允许空键和值)。顺便说一句,2次向下投票?!似乎有些人一直在使用JDK1.1集合,或者根本不想阅读Map的API定义。我提到了
Hashtable
,因为OP就是这么做的。而@Steve,
HashMap
确实允许空值()。我只知道值,所以这不起作用。谢谢你的关注,你可以做到这一点,但没有必要使用额外的收藏;这只会让事情变得更复杂。对于HashMap和其他映射也是如此:我们可以对HashMap也使用枚举吗?