【问题标题】:check if hashmap contains value other than certain value检查 hashmap 是否包含某个值以外的值
【发布时间】:2014-03-15 02:29:03
【问题描述】:

我正在尝试在 JAVA 中实现 HashMap,在我的算法中,我必须查找是否有任何键包含特定值以外的值....例如,可以说,地图中的所有键应该将值 0 存储在其中。

如何检查地图是否包含不等于 0 的值。

我试过了,但逻辑上我知道这是不正确的:

if(!hm.containsValue(0)) /* where hm is hashmap object*/

【问题讨论】:

  • "在 hashmap 中搜索一个值是在恒定时间 O(1) 内完成的" --> 嗯,不,那将用于键查找,即使这样也不是 O(1)
  • 我无法理解您的问题。您是实现自己的HashMap,还是使用Java 提供的?顺便说一句,在 HashMap 中搜索值不是 O(1) 操作。
  • @fge :删除了最后一行...您的评论增加了我的知识:)
  • @RohitJain : m 实现 JAVA 的默认设置,主要是尝试查找字谜词...但 fieldfieldd 失败,因为我没有对存储在 map 中的值进行适当检查,所以是想一口气检查 hashmap 值....

标签: java search hashmap


【解决方案1】:

您可以按如下方式定义地图:

Map<String, Integer> map = new HashMap<String, Integer>();

并检查它是否包含非零值,如下所示:

    for ( Integer value: map.values()) {
        if ( value != 0) {
            // non-zero value found in the map
        }
    }

【讨论】:

  • 更新了答案以检查它是否包含特定值
  • 您可以将定义更改为: Map map = new HashMap();
  • 你的解决方案给出了does map continues this value的答案...我的问题是does map continues value other than this value ....
  • 那么,您要检查地图值是否包含非零值?
  • 好的……这样理解……在所有操作之后,我的地图将具有0,0,-1,1,0,0 之类的值……但理想情况下它应该只有0,0,0,0,0,0。 ...所以我还需要检查地图是否包含0 以外的值!!
【解决方案2】:

您必须遍历所有值并检查每个值是否不等于零,这就是O(n)。使用Map 没有其他选择,Map 对于查找 keys 是有效的,而不是在 values 中查找某些东西。例如,使用 Java 中的标准 Map 实现:

Integer zero = new Integer(0);
for (Integer i : hm.values()) {
    if (!zero.equals(i)) {
        System.out.println("found one non-zero value");
        break;
    }
}

【讨论】:

  • 理论上可以抛出 NPE,但是... ;)
  • @ÓscarLópez : 菜鸟问题,这行Integer zero = new Integer(0); 的目的是什么我的意思是我理解定义一个整数,但(0) 在其中做什么???
  • @NoobEditor new Integer(0) 这是对 Integer constructor 的调用。当您编写0 时,您创建的不是Integer,而是int。这也可以工作并且是等效的:Integer zero = 0; 但因为在后台 autoboxing 正在发生。
猜你喜欢
  • 2014-05-26
  • 2022-01-05
  • 1970-01-01
  • 2021-10-09
  • 2012-05-03
  • 2016-05-01
  • 1970-01-01
  • 2022-07-05
  • 2014-12-03
相关资源
最近更新 更多