2016-01-13 69 views
0

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

事情是,当我运行.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

values()方法将返回Map的在它们插入相同的顺序值,这就是有序手段,不排序混淆,这意味着不同的事情 - 该项目如果没有提供比较器,则遵循由值Comparator定义的顺序或其自然顺序。

也许你会更好的使用SortedMap保持物品按键排序。总结:LinkedHashMap订购TreeMap排序

+0

我很抱歉,我应该更仔细地处理事情。我的问题是,无论如何,它们不会以与插入顺序相同的顺序显示。 .values()产生随机排序的我的地图,而不是按照插入顺序。 – Luiserebii

+0

@Luiserebii尝试使用'entrySet()'或'keySet()'遍历'Map'。 –

+0

嗯,只需检查keySet,并且按键也没有插入顺序。任何想法为什么这可能发生?我应该在哪里上传我的代码? – Luiserebii

0

尝试使用TreeMap代替。您应该按照升序键顺序获取值。

0

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