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

时间:2014-02-25 07:20:20

标签: java hashtable

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

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}

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

3 个答案:

答案 0 :(得分:6)

试试这个

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

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

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

答案 1 :(得分:4)

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

答案 2 :(得分:1)

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
  }
}