【问题标题】:for loop not iterating through my hashmap's key setfor 循环没有遍历我的 hashmaps 键集
【发布时间】:2017-10-08 22:52:48
【问题描述】:

我有一个HashMap,格式如下:

HashMap<List<String>, List<String[]>>

这个 hashmap 已经被填充,这是我查看 keyset 时返回的结果的一部分:

[[124, 1], [136, 2], [136, 1], [257, 1], [502A, 1], [269, 1], [111, 1], [232, 1], [123, 1], [93, 1], [81, 1], [93, 2], [6N, 1]]

(未满,因为整篇太长了)

我正在尝试 for 循环以使用此代码遍历我的所有键集:

for(List<String> key : hashmap.keySet()){
    if(key.get(0) == input){
            if(key.get(1) == "1"/*second part of key*/){
                dir1.add(hashmap.get(key).get(0)[1]);
            }
            else if(key.get(1) == "2"/*second part of key*/){
                dir2.add(hashmap.get(key).get(0)[1]);
            }
        }
}

但是,当我设置断点并调试项目时,我意识到 for 循环只循环一次。我做错了什么?

【问题讨论】:

  • //do something 在做什么?它是否包含break/return 语句?您在执行期间是否更改了hashmap
  • 我只是从 hashmap 中取出东西,而我的 return 语句在 for 循环之外
  • 我认为提供“做某事”部分(或至少是重现您的错误的最小版本)可能是可取的。根据提供的代码,没有错,但也没有太多……
  • 拥有更多细节会很有用。从你写的来看,一切正常
  • key.get(0) == input 对我来说很可疑;它似乎通过引用而不是内容来比较字符串。请改用equals()

标签: java for-loop hashmap


【解决方案1】:

您应该为键使用适当的类,而不是 List&lt;String&gt;

您应该使用.equals. 比较Strings,即"1".equals(key.get(1))

实际的foreach 看起来很好,所以如果它没有循环,那么要么是某些东西打破/异常让你脱离循环,要么你的数据结构实际上只包含一项。它也完全有可能循环不止一次,但由于对 if 语句的错误比较,您认为它不是。

我会首先检查您的 Map 是否确实包含多个条目。您现在使用数组列表列表的映射设置它的方式只是要求混乱。

【讨论】:

  • +1 在我看来, if(key.get(0) == input){ 不匹配大多数值,因此无需操作即可迭代。初学者程序员假设只迭代一次等等。
  • 我尝试在 for 循环中注释掉 everytinh ,但它仍然只循环一次。是的,我的地图确实有多个条目
  • @LimJunWei 在进入循环之前打印出 hashMap.size() 和 hashMap.keySet().size()。你得到了什么?
  • 如果您将 print 语句作为循环中的第一条语句仅打印密钥或其他内容会发生什么?
  • 如果这不起作用,那么我只能建议制作一个重现问题的 SSCE 并将其发布,因为您发布的症状和代码不兼容。听起来你几乎已经完成了for(List&lt;String&gt; key : hashmap.keySet()); {(请参阅该行中的 ;),但这不在上面的代码中
【解决方案2】:

好的,抱歉,问题出在我的 netbeans 或我的电脑上,但我重新启动了电脑,现在一切正常。感谢所有试图提供帮助的人

【讨论】:

    猜你喜欢
    • 2013-04-05
    • 1970-01-01
    • 2017-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-17
    • 1970-01-01
    • 2017-05-14
    相关资源
    最近更新 更多