2016-01-13 74 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」。這就是我得到的複製粘貼,哈哈。感謝所有幫助!