迭代LinkedHashMap值是不是有序的?

时间:2016-01-13 22:39:10

标签: java arrays linkedhashmap key-value-store toarray

对于我在Java中设计的问题,我给出了一个日期列表和中奖彩票号码。我应该和他们一起做事,并按顺序吐出来。我决定选择一个LinkedHashMap来解决它,包含日期的Date和包含中奖号码数组的int []。

事情是,当我运行.values()函数时,我注意到数字不再被排序(通过插入)。我正在运行的代码是:

    for(int i = 0; i < 30; i++){ //testing first 30 to see if ordered
        System.out.println(Arrays.toString((int [])(winningNumbers.values().toArray()[i])));
    }   

有人能看出我做错了什么吗?诱惑几乎只是使用.get()并遍历日期,因为日期确实按某种顺序排列,但这可能使得使用LinkedHashMap没有实际意义。在这种情况下,也可能使用2-D ArrayList [] []。提前谢谢!

编辑:添加代码以供进一步检查!

彩票类:http://pastebin.com/9ezF5U7e 文字文件:http://pastebin.com/iD8jm7f8

要测试,请调用checkOldLTNums()。只要将它传递给任何int []数组,它就不会使用它,至少与这个问题有关。输出与.txt中的第一行不同,后者是有组织的。谢谢!

EDIT2:

我想我弄清楚它失败的原因。我使用了一个较小的.txt文件,代码完美无缺。将1900条内容加载到内存中可能是不明智的。我想最好只加载单独的行并比较它们而不是一次抓取所有内容。这个逻辑是否合理?从这里获得的任何建议都是有用的。

3 个答案:

答案 0 :(得分:3)

values()方法将按照插入的顺序返回Map的值,这就是 ordered 的意思,不是' t将它与排序混淆,这意味着另一件事 - 如果没有提供比较器,则项目遵循由值Comparator定义的排序或其自然顺序。

也许你最好使用SortedMap来保持按键排序的项目。总结一下:LinkedHashMap 订购TreeMap 已排序

答案 1 :(得分:0)

尝试使用TreeMap代替。您应该以这种方式按升序键顺序获取值。

答案 2 :(得分:0)

我无法相信我错过了这个。我做了一些更多的故障排除,并意识到一些Date键正在替换其他键。经过一些测试后,我终于意识到我使用的格式是关闭的:&#34; dd / MM / yyyy&#34;而不是&#34; MM / dd / yyyy&#34;。这就是我为复制粘贴所得到的,哈哈。感谢所有帮助过的人!