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() を使用して日付を反復処理するようにほとんど誘惑されますが、これは日付がある順序で行われるためです。その場合、2-D ArrayList[][] を使用することもできます。前もって感謝します!

編集: さらに調べるためのコードを追加!

宝くじクラス: http://pastebin.com/9ezF5U7e テキストファイル: http://pastebin.com/iD8jm7f8

テストするには、checkOldLTNums() を呼び出します。int[] 配列を渡すだけで、少なくともこの問題に関連して、それを利用しません。出力は、整理された .txt の最初の行とは異なります。ありがとう!

EDIT2:

失敗する理由がわかった気がします。小さい .txt ファイルを使用したところ、コードは完全に機能しました。1900 個のエントリをメモリにロードするのは賢明ではないかもしれません。一度にすべてを取得するのではなく、個々の行をロードして比較する方が良いと思います。この論理は健全ですか?ここからのアドバイスは役に立ちます。

4

3 に答える 3

3

このvalues()メソッドは、挿入されたのと同じ順序でMapの値を返します。それが、順序付けられたという意味です。並べ替えと混同しないでください。別の意味です。項目は、値によって定義された順序付けに従うか、コンパレータは提供されませんでした。Comparator

SortedMapおそらく、アイテムをキーでソートしておくを使用したほうがよいでしょう。要約するLinkedHashMapと、順序付けられTreeMap、並べ替えられます。

于 2016-01-13T22:44:34.403 に答える
0

TreeMap代わりにa を使用してみてください。そのようにしてキーの昇順で値を取得する必要があります。

于 2016-01-13T22:49:18.253 に答える