検索
ホームページJava&#&チュートリアルJava の Map に関する 9 つの主要な問題の分析

一般的に言えば、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」の記事を参照してください。

6. Map での逆クエリ

Map にキーと値のペアを追加すると、Map 内のキーと値の間に 1 対 1 の対応があり、1 つのキーが 1 つのキーに対応することになります。価値。ただし、特定の値からキーを見つけるなど、逆クエリが必要になる場合があります。残念ながら、このデータ構造は双方向マップと呼ばれます。
Apache と Guava はこの双方向マップの実装を共同で提供しており、その実装ではキーと値の両方が 1:1 の関係を持つ必要があると規定されています。

7. マップのコピー

Java にはマップをコピーするためのメソッドが多数用意されていますが、それらのメソッドは常に同期されるとは限りません。簡単に言うと、マップが変更されても、コピーされたマップは同じままになります。以下はより効率的な実装方法です:
Map CopyedMap = Collections.synchronizedMap(map);
もちろん、クローン作成という別の方法もあります。ただし、Java の創始者である Josh Bloch は、こ​​のアプローチを推奨していません。彼はマップのクローン作成の問題についてインタビューで次のように述べています。クローン メソッドは、人々が本当に必要としているため、多くのクラスで提供されています。しかし、クローン作成には非常に制限があり、多くの場合、不必要な影響が生じます。
8. 空のマップを作成します
このマップが使用できないように設定されている場合は、次の方法で実現できます
map = Collections.emptyMap();
逆に、それを使用する場合は、直接
map = new HashMap( );

以上がこの記事の全内容です。皆さんの学習に役立つことを願っています。また、皆さんも PHP 中国語 Web サイトをサポートしていただければ幸いです。

Java における Map の 9 つの主要な問題の分析に関するその他の関連記事については、PHP 中国語 Web サイトに注目してください。


声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
高度なJavaプロジェクト管理、自動化の構築、依存関係の解像度にMavenまたはGradleを使用するにはどうすればよいですか?高度なJavaプロジェクト管理、自動化の構築、依存関係の解像度にMavenまたはGradleを使用するにはどうすればよいですか?Mar 17, 2025 pm 05:46 PM

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

適切なバージョン化と依存関係管理を備えたカスタムJavaライブラリ(JARファイル)を作成および使用するにはどうすればよいですか?適切なバージョン化と依存関係管理を備えたカスタムJavaライブラリ(JARファイル)を作成および使用するにはどうすればよいですか?Mar 17, 2025 pm 05:45 PM

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

カフェインやグアバキャッシュなどのライブラリを使用して、Javaアプリケーションにマルチレベルキャッシュを実装するにはどうすればよいですか?カフェインやグアバキャッシュなどのライブラリを使用して、Javaアプリケーションにマルチレベルキャッシュを実装するにはどうすればよいですか?Mar 17, 2025 pm 05:44 PM

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

キャッシュや怠zyなロードなどの高度な機能を備えたオブジェクトリレーショナルマッピングにJPA(Java Persistence API)を使用するにはどうすればよいですか?キャッシュや怠zyなロードなどの高度な機能を備えたオブジェクトリレーショナルマッピングにJPA(Java Persistence API)を使用するにはどうすればよいですか?Mar 17, 2025 pm 05:43 PM

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

Javaのクラスロードメカニズムは、さまざまなクラスローダーやその委任モデルを含むどのように機能しますか?Javaのクラスロードメカニズムは、さまざまなクラスローダーやその委任モデルを含むどのように機能しますか?Mar 17, 2025 pm 05:35 PM

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

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

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

ホットツール

PhpStorm Mac バージョン

PhpStorm Mac バージョン

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

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

SublimeText3 Mac版

SublimeText3 Mac版

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

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター