0

对于我在 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 没有意义。在这种情况下,不妨使用二维 ArrayList[][]。提前致谢!

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

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

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

编辑2:

我想我知道为什么它失败了。我使用了一个较小的 .txt 文件,并且代码运行良好。将 1900 个条目加载到内存中可能是不明智的。我想最好只加载单独的行并进行比较,而不是一次抓取所有内容。这个逻辑合理吗?从这里得到的任何建议都会很有用。

4

3 回答 3

3

values()方法将以插入的相同顺序Map返回's 值,这就是ordered的意思,不要将它与sorted混淆,这意味着不同的东西 - 项目遵循由值定义的顺序或其自然顺序,如果没有提供比较器。Comparator

也许你最好使用 aSortedMap来保持项目按键排序。总结一下:LinkedHashMapis orderedTreeMapis sorted

于 2016-01-13T22:44:34.403 回答
0

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

于 2016-01-14T07:52:34.317 回答
0

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

于 2016-01-13T22:49:18.253 回答