繁体   English   中英

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

[英]How do I remove an element from a hashtable using its value and not the key?

我是哈希表的新手,我只是搞清楚它的基本操作。 我有一个如下所示创建的哈希表,也插入了值。

Hashtable<Integer , String> ht = new Hashtable<Integer , String>();
ht.put(1234, "ABCD");
ht.put(2345, "EFGH");
ht.put(4567, "IJKL");

我可以使用密钥删除所需的元素,如下所示

System.out.println("Deleting entry with key 2345");
ht.remove(2345);
System.out.println(ht.toString());

它给出了以下输出

Deleting entry with key 2345
{4567=IJKL, 1234=ABCD}

我无法找到任何有助于使用值作为索引并删除元素来定位哈希表中的元素的方法。 我该怎么办呢?

尝试这个

ht.values().remove("ABCD");

这将删除具有指定值的一个条目,如果可能有多个具有相同值的条目,则可以使用此条目

ht.values().removeAll(Collections.singleton("ABCD"));

使用Map.entrySet()导航并检查Map.Entry#getValue()是否相等。
您可以多次使用值,因此使用Iterator迭代entrySet并使用Iterator.remove()删除元素

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();
    }
  }
}
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
  }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM