マップの種類
Javaでは、MAPの主な機能は、キー価値のペアを保存することです。値はキーに基づいて取得されるため、キーを繰り返すことは許可されていません。主に次のカテゴリがあります。
Hashmap:
最も一般的に使用されるマップは、キーのハッシュコード値に従ってデータを保存し、非常に速いアクセス速度でキーに従ってその値を直接取得できます。横断するとき、データ取得の順序は完全にランダムです。 HashMapでは、1つのレコードのみがnullになります。複数のレコードの値がnullであること。 HashMapは、スレッドの同期をサポートしていません。つまり、複数のスレッドがハッシュマップをいつでも書き込むことができます。データの矛盾につながる可能性があります。同期が必要な場合は、CynchronizedMapのコレクション方法を使用してHashMapを同期させるか、同時ハッシュマップを使用できます。ハッシュテーブルはハッシュマップに似ています。辞書クラスから継承します。違いは、記録されたキーや値を空にしないことです。スレッドの同期をサポートします。つまり、1つのスレッドのみがハッシュテーブルをいつでも書き込むことができるため、書き込み時にハッシュテーブルが遅くなります。
LinkedHashmap
レコードの挿入順序が保存されます。 Linkedhashmapをイテレータで通過する場合、最初に取得したレコードを最初に挿入する必要があります。建設中にパラメーターを使用して、アプリケーションの数に応じてソートすることもできます。移動するときはハッシュマップよりも遅くなりますが、例外があります。 HashMapには大容量があり、実際のデータが少ない場合、Linkedhashmapのトラバーサル速度は実際のデータにのみ関連し、容量とは関係ありませんが、Hashmapの横断速度はその容量に関連しているため、Linkedhashmapよりも遅くなる可能性があります。
Treemap
SORTMAPインターフェイスを実装すると、保存するレコードはキーに従ってソートできます。デフォルトでは、キー値の昇順でソートされるか、ソートされたコンパレータを指定することもできます。イテレータで通過すると、得られたレコードがソートされます。
キーソート
上記のマップの概要から、Treemapには独自の重要なソート機能があることがわかります。それを作成するときに、比較インターフェイスを同時に実装する必要があります。例は次のとおりです。
private static void sort_by_key(){map <integer、integer> treemap = new treemap <>(new Comparator <Integer>(){@Override public int Compare(integer O1、Integer O2){return o2-o1; //逆順序。 //(int i = 0; i <100; i ++){int key =(int)(10000*math.random())のデータを入力します。 int value =(int)(10000*math.random()); treemap.put(key、value); } outmap(treemap); } public static void outmap(map <integer、integer> map){for(integer integer:map.keyset()){system.out.println( "key ="+integer+"value ="+map.get(integer)); }}/*結果は次のとおりです。Key= 9977 Value = 80Key = 9684 Value = 7108Key = 9422 Value = 1706Key = 9264 Value = 9248 Value = 9024 Value = 7048Key = 8892 = 3124Key = 8879 Value = 6414Key = 8814値= 8171Key = 8728値= 1538Key = 8513値= 4956KEY = 8462値= 5617Key = 8355値= 8912*/上記からわかるように、キーで並べ替えることは難しくありませんが、ソートを配置することはより厄介なので、マップをめくる必要があります。
値でソートします
MAPにはJavaでこの機能がないため、自分で実装する必要があります。アイデアは次のとおりです。
Javaのリストは、比較インターフェイスを使用できます。
マップは実際にはエントリ<>コレクションです。したがって、list <entry <>>を使用すると、ソートされた要素をLinkedMapに挿入して挿入できます。
コードの実装は次のとおりです。
private static map <integer、integer> sortmap(map <integer、integer> linkedMap){list <map.entry、integer >> cache = new arraylist <>(linkedmap.entryset()); //比較関数collections.sort(キャッシュ、新しいコンパレータ<map.entteger、integer >>(){@override public int compare(entry <integer、integer> o1、entry <integer、integer> o2){//戻り値が0未満の場合、o2がo2を返す場合、o2。 map <integer、integer> resultmap = new linkedhashmap <>(); //結果をlinkedMapに挿入し、(int i = 0; i <cache.size(); i ++){resultmap.put(cache.get(i).getkey()、cache.get(i).getvalue()); } return resultMap; }/*result:7965 99661067 99631720 98333257 97383934 95787777 93481924 93153472 92703649 91145892 9078*//このようにして、価値別のソートとキーによるソートの両方を実現できます。