Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用元素的值而不是键从哈希表中删除元素?_Java_Hashtable - Fatal编程技术网

Java 如何使用元素的值而不是键从哈希表中删除元素?

Java 如何使用元素的值而不是键从哈希表中删除元素?,java,hashtable,Java,Hashtable,我对哈希表还不熟悉,我只是在搞清楚它的基本操作。 我创建了一个如下所示的哈希表,并插入了值 Hashtable<Integer , String> ht = new Hashtable<Integer , String>(); ht.put(1234, "ABCD"); ht.put(2345, "EFGH"); ht.put(4567, "IJKL"); 这将提供以下输出 Deleting entry with key 2345 {4567=IJKL, 1234=AB

我对哈希表还不熟悉,我只是在搞清楚它的基本操作。 我创建了一个如下所示的哈希表,并插入了值

Hashtable<Integer , String> ht = new Hashtable<Integer , String>();
ht.put(1234, "ABCD");
ht.put(2345, "EFGH");
ht.put(4567, "IJKL");
这将提供以下输出

Deleting entry with key 2345
{4567=IJKL, 1234=ABCD}
我找不到任何有助于在哈希表中使用值作为索引定位元素并删除元素的方法。我该怎么做呢?

试试这个

ht.values().remove("ABCD");
这将删除一个具有指定值的条目,如果可能有多个具有相同值的条目,则可以使用此选项

ht.values().removeAll(Collections.singleton("ABCD"));
Map=。。。
迭代器it=map.entrySet().Iterator();
while(it.hasNext()){
Map.Entry=it.next();
//如果值等于xxx,则删除条目。
如果(entry.getValue()!=null&&entry.getValue().equals(“X”)){
//做点什么
}
}
使用导航并检查是否相等。
您可以多次使用一个值,以便使用
迭代器迭代entrySet
,并使用
迭代器删除元素。remove()

void deleteItem(字符串项){
迭代器it=map.entrySet().Iterator();
while(it.hasNext()){
Map.Entry=it.next();
if(entry.getValue().equals(item)){
it.remove();
}
}
}

您是否关心此操作的效率?如果你这样做,你需要一个不同的数据结构。嗯,你知道一个值可以在地图中出现多次,对吗?@NPE我该如何改进它?@fge是的。我明白了。但正如我所说,我对使用哈希表还不熟悉。现在只需使用简单的操作来计算它的正反两面。
Map
的目的是通过键而不是值来访问条目。有些库(例如Guava)确实有双向映射,但删除给定值的键不是
映射
的“简单操作”;)非常感谢你。这正是我要找的!
ht.values().removeAll(Collections.singleton("ABCD"));
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 value equals xxx.
  if (entry.getValue() != null && entry.getValue().equals("X")) {
    // Do something
  }
}
void deleteItem(String item) {
  Iterator<Map.Entry<Integer, String>> it = map.entrySet().iterator();
  while (it.hasNext()) {
    Map.Entry<Integer, String> entry = it.next();
    if(entry.getValue().equals(item)) {
      it.remove();
    }
  }
}