一般的に言えば、マップはキー価値のペアで構成されるデータ構造であり、各キーはセットで一意です。 KとVを使用してキーと値を表して、JavaのMAPに関する9つの主要な問題を説明しましょう。
0。マップをリストタイプに変換します
Javaでは、Map Interfaceがコレクションを取得する3つの方法を提供します:キーセット、値セット、キー価値セット。それらはすべて、コンストラクターまたはaddall()メソッドによるリストタイプに変換できます。次のコードは、マップからアレイリストを作成する方法を示しています。
// key listlist keylist = new arrayList(map.keyset()); // value listlist valuelist = new arrayList(map.valueset()); // key-value listlist enterlist = new arrayset(map.entryset());
1.エントリを通じてマップをトラバースします
キーと値のペアがmap.entryと呼ばれるため、Javaのこの方法は存在します。 map.entryset()キー価値コレクションを返します。これは非常に効率的なトラバースの方法です。
for(エントリエントリ:map.entryset()){// get keyk key = entry.getkey(); // get valuev value = entry.getValue();}イテレータは、特にJDK1.5の前に頻繁に使用されます
iterator itr = map.entryset()。iterator(); while(itr.hasnext()){entry entry = itr.next(); // get keyk key = entry.getKey(); 2。キーごとにマップを並べ替えます
ソートには、MapのKEで頻繁に操作が必要です。 1つの方法は、コンパレータを通じてそれを実装することです。
リストlist = new arrayList(map.entryset()); collections.sort(list、new Comparator(){@overridepublic int Compare(entry e1、entry e2){return e1.getkey()。比較(e2.getkey();}});別の方法は、sortedMapを使用することですが、同等のインターフェイスを実装する必要があります。
sortedmap sortedmap = new Treemap(new Comparator(){@overridepublic int Compare(k1、k k2){return k1.compareto(k2);}}); sortedmap.putall(map);3.値でマップを並べ替え<br />これは前のポイントと多少似ています。コードは次のとおりです。
リストlist = new arrayList(map.entryset()); collections.sort(list、new Comparator(){@overridepublic int Compare(entry e1、entry e2){return e1.getValue()。比較(e2.getValue();}}});4.静的定数マップを初期化します
グローバルな静的マップを作成する場合、2つの方法があり、スレッドセーフです。
Test1では、MAPは静的であると宣言していますが、test1.map.put(3、 "3")と同じように、初期化時に値を変更できます。
Test2では、内側のクラスを通じて非修飾されるように設定するため、test2.map.put(3、 "3")を実行すると、
UnsupportedoperationException Exceptionは、変更を禁止します。 public class test1 {private static final map map; static {map = new hashmap(); map.put(1、 "one"); map.put(2、 "2");}} public static final Map Map; static {map amap = new hashmap(); amap.put(1、 "2、1、" 2、 "); collections.unmodifiablemap(amap);}} 5.ハッシュマップ、ツリーマップ、ハッシュテーブルの違い
MAPインターフェイスには、Hashmap、Treemap、Hashtableの3つの実装があります。
彼らは違っています。詳細については、記事「Hashmap vs. Treemap vs. Hashtable vs. Linkedhashmap」を参照してください。
6。マップの逆クエリ
キー値ペアをマップに追加した後、マップではキーと値が1つに対応し、キーが値に対応することを意味します。ただし、特定の値を通じてキーを検索するなど、クエリを逆にする必要がある場合があります。このデータ構造は、双方向マップと呼ばれます。残念ながら、JDKはそれをサポートしていません。
ApacheとGuavaは、この双方向マップの実装を共同で提供します。これにより、キーと値の両方が1:1の関係でなければならないことが規定されています。
7。マップのコピー
Javaは、マップの複製を実現できる多くの方法を提供しますが、これらの方法はいつでも同期しない場合があります。簡単に言えば、マップで発生するのは変更であり、コピーされたものは同じままです。これが比較的効率的な実装方法です。
Map CopiedMap = collections.synchronizedMap(Map);
もちろん、クローン化している別の方法があります。しかし、私たちのJavaの創始者であるJosh Blochは、この方法を推奨していません。彼はかつてマップのクローニングについてのインタビューで言っていました:クローンメソッドは多くのクラスで提供されます。なぜなら、人々はそれらを必要とするからです。ただし、クローニングは非常に限られており、多くの場合、不必要な影響を引き起こします。 (元のテキスト「コンストラクター対クローニングをコピー」)
8。空のマップを作成します
このマップが利用できないように設定されている場合、次のように実装できます
map = collections.emptymap();
それどころか、私たちがそれを使用できるとき、私たちは
map = new Hashmap();
上記はこの記事のすべての内容です。みんなの学習に役立つことを願っています。誰もがwulin.comをもっとサポートすることを願っています。