簡體   English   中英

是否沒有通過LinkedHashMap值進行迭代?

[英]Iterating through LinkedHashMap Values Isn't Ordered?

對於我用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個條目裝入內存可能不明智。 我想最好是加載單個行並進行比較,而不是一次抓取所有內容。 這聽起來合理嗎? 從這里得到的任何建議都會很有用。

values()方法將按插入時的順序返回Map的值,這就是有序的意思,不要將它與sorted混淆,這意味着另一件事-這些項遵循值的Comparator所定義的順序或其自然順序(如果未提供比較器)。

也許最好使用SortedMap來按鍵對項目進行排序。 總結一下: LinkedHashMap排序TreeMap排序

嘗試改用TreeMap 您應該以這種方式以升序鍵順序獲取值。

我簡直不敢錯過。 我進行了更多的故障排除,並意識到某些日期鍵正在替換其他鍵。 經過一些測試之后,我終於意識到我使用的格式已關閉:“ dd / MM / yyyy”而不是“ MM / dd / yyyy”。 這就是我粘貼粘貼所獲得的,哈哈。 感謝所有的幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM