一般的に言えば、Map はキーと値のペアで構成されるデータ構造であり、各キーはコレクション内で一意です。 Java の Map に関する 9 つの主要な問題を説明するために、キーと値を表す K と V を使用してみましょう。
0. Map を List 型に変換する
Java では、Map インターフェイスは、キー セット、値セット、およびキーと値のセットの 3 つのコレクション取得メソッドを提供します。これらはすべて、コンストラクターまたは addAll() メソッドを通じて List 型に変換できます。次のコードは、Map から ArrayList を構築する方法を示しています。
// key list List keyList = new ArrayList(map.keySet()); // value list List valueList = new ArrayList(map.valueSet()); // key-value list List entryList = new ArrayList(map.entrySet());
1. Entry を通じて Map を走査する
Java でキーと値のペアとして存在するこの方法は、Map.Entry と呼ばれます。 Map.entrySet() はキーと値のセットを返します。これは非常に効率的なトラバーサル メソッドです。
for(Entry entry: map.entrySet()) { // get key K key = entry.getKey(); // get value V value = entry.getValue(); }
イテレーター 特に JDK1.5 より前ではよく使用されます
Iterator itr = map.entrySet().iterator(); while(itr.hasNext()) { Entry entry = itr.next(); // get key K key = entry.getKey(); // get value V value = entry.getValue(); }
2. キーによるマップのソート
ソートには、比較コンパレーターを使用して以下を実現することが必要です。
List list = new ArrayList(map.entrySet()); Collections.sort(list, new Comparator() { @Override public int compare(Entry e1, Entry e2) { return e1.getKey().compareTo(e2.getKey()); } });もう 1 つの方法は SortedMap を使用する方法ですが、Comparable インターフェイスを実装する必要があります。
SortedMap sortedMap = new TreeMap(new Comparator() { @Override public int compare(K k1, K k2) { return k1.compareTo(k2); } }); sortedMap.putAll(map);3. 値でマップを並べ替えます
これは、前の点と多少似ています:
List list = new ArrayList(map.entrySet()); Collections.sort(list, new Comparator() { @Override public int compare(Entry e1, Entry e2) { return e1.getValue().compareTo(e2.getValue()); } });4. 静的定数 Map を初期化する Map、次の 2 つのメソッドがあり、スレッドセーフです。
Test1 では、マップは静的であると宣言しましたが、Test1.map.put(3,"three"); のように、初期化中にその値を変更できます。
Test2 では、内部クラスを渡し、次のように設定します。変更不可能な場合、Test2.map.put(3,"three") を実行すると、
UnsupportedOperationException 异常来禁止你修改。 public class Test1 { private static final Map map; static { map = new HashMap(); map.put(1, "one"); map.put(2, "two"); } } public class Test2 { private static final Map map; static { Map aMap = new HashMap(); aMap.put(1, "one"); aMap.put(2, "two"); map = Collections.unmodifiableMap(aMap); } }5、HashMap、TreeMap、および Hashtable がスローされます。
Map インターフェイスには、3 つの実装があります。ハッシュマップ、ツリーマップ、およびハッシュテーブル。
それらは異なります。詳細については、「HashMap vs. TreeMap vs. Hashtable vs. LinkedHashMap」の記事を参照してください。
Map にキーと値のペアを追加すると、Map 内のキーと値の間に 1 対 1 の対応があり、1 つのキーが 1 つのキーに対応することになります。価値。ただし、特定の値からキーを見つけるなど、逆クエリが必要になる場合があります。残念ながら、このデータ構造は双方向マップと呼ばれます。
Apache と Guava はこの双方向マップの実装を共同で提供しており、その実装ではキーと値の両方が 1:1 の関係を持つ必要があると規定されています。
Java にはマップをコピーするためのメソッドが多数用意されていますが、それらのメソッドは常に同期されるとは限りません。簡単に言うと、マップが変更されても、コピーされたマップは同じままになります。以下はより効率的な実装方法です:
Map CopyedMap = Collections.synchronizedMap(map);
もちろん、クローン作成という別の方法もあります。ただし、Java の創始者である Josh Bloch は、このアプローチを推奨していません。彼はマップのクローン作成の問題についてインタビューで次のように述べています。クローン メソッドは、人々が本当に必要としているため、多くのクラスで提供されています。しかし、クローン作成には非常に制限があり、多くの場合、不必要な影響が生じます。
8. 空のマップを作成します
このマップが使用できないように設定されている場合は、次の方法で実現できます
map = Collections.emptyMap();
逆に、それを使用する場合は、直接
map = new HashMap( );

この記事では、Javaプロジェクト管理、自動化の構築、依存関係の解像度にMavenとGradleを使用して、アプローチと最適化戦略を比較して説明します。

この記事では、MavenやGradleなどのツールを使用して、適切なバージョン化と依存関係管理を使用して、カスタムJavaライブラリ(JARファイル)の作成と使用について説明します。

この記事では、カフェインとグアバキャッシュを使用してJavaでマルチレベルキャッシュを実装してアプリケーションのパフォーマンスを向上させています。セットアップ、統合、パフォーマンスの利点をカバーし、構成と立ち退きポリシー管理Best Pra

この記事では、キャッシュや怠zyなロードなどの高度な機能を備えたオブジェクトリレーショナルマッピングにJPAを使用することについて説明します。潜在的な落とし穴を強調しながら、パフォーマンスを最適化するためのセットアップ、エンティティマッピング、およびベストプラクティスをカバーしています。[159文字]

Javaのクラスロードには、ブートストラップ、拡張機能、およびアプリケーションクラスローダーを備えた階層システムを使用して、クラスの読み込み、リンク、および初期化が含まれます。親の委任モデルは、コアクラスが最初にロードされ、カスタムクラスのLOAに影響を与えることを保証します


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

PhpStorm Mac バージョン
最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

SAP NetWeaver Server Adapter for Eclipse
Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

VSCode Windows 64 ビットのダウンロード
Microsoft によって発売された無料で強力な IDE エディター
