ホームページ >Java >&#&チュートリアル >Java HashMap の単一キーの下に複数の値を格納するにはどうすればよいですか?
HashMap の単一のキーに複数の値を格納する
Java のマップはキーを単一の値に関連付けますが、必要な場合があります。複数の値を同じキーの下に保存します。この質問では、この機能を実現する方法について説明します。
値としてリストを使用したマップ
1 つのアプローチは、値がリストであるマップを使用することです。これにより、複数の値をキーに関連付けられたリストとして保存できます。ただし、これには、リストには 2 つだけでなく、任意の数の値を含めることができるという制限があります。
ラッパー クラスの使用
別のラッパー クラスを作成することもできます。これは値を保持し、このラッパーのインスタンスをマップ内に配置します。このアプローチでは、クラスを定義し、キーごとにインスタンスを作成する必要があるため、追加のコードが必要になります。
タプルベースのアプローチ
固定数の値を適用する場合、タプル クラス (多くの場合、ライブラリに含まれるか、独自の実装によって見つかります) を使用できます。その後、マップはタプルを値として保存し、キーの下にある複数の値の一貫した構造を確保できます。
複数のマップ
別のオプションは、複数のマップをそれぞれ 1 つずつ使用することです。価値。このアプローチは簡単ですが、慎重に扱わないとマップが同期しなくなるリスクが生じる可能性があります。
例
値としてリストを使用したマップ
import java.util.*; class Person { String name; public Person(String name) { this.name = name; } public String toString() { return this.name; } } class HashMapMultiple { public HashMapMultiple() { Map<String, List<Person>> peopleByForename = new HashMap<>(); List<Person> people = new ArrayList<>(); people.add(new Person("Bob Smith")); people.add(new Person("Bob Jones")); peopleByForename.put("Bob", people); List<Person> bobs = peopleByForename.get("Bob"); Person bob1 = bobs.get(0); Person bob2 = bobs.get(1); System.out.println("Bob1: " + bob1); System.out.println("Bob2: " + bob2); } public static void main(String[] args) { new HashMapMultiple(); } }
ラッパーの使用クラス
import java.util.*; class Person { String name; public Person(String name) { this.name = name; } public String toString() { return this.name; } } class Wrapper { public Wrapper(Person person1, Person person2) { this.person1 = person1; this.person2 = person2; } public Person getPerson1() { return this.person1; } public Person getPerson2() { return this.person2; } private Person person1; private Person person2; } class HashMapMultiple { public HashMapMultiple() { Map<String, Wrapper> peopleByForename = new HashMap<>(); peopleByForename.put("Bob", new Wrapper(new Person("Bob Smith"), new Person("Bob Jones"))); Wrapper bobs = peopleByForename.get("Bob"); Person bob1 = bobs.getPerson1(); Person bob2 = bobs.getPerson2(); System.out.println("Bob1: " + bob1); System.out.println("Bob2: " + bob2); } public static void main(String[] args) { new HashMapMultiple(); } }
タプルベースのアプローチ
このアプローチにはタプル クラスが必要です:
import java.util.*; class Person { String name; public Person(String name) { this.name = name; } public String toString() { return this.name; } } class Tuple2<T1,T2> { public Tuple2(T1 val1, T2 val2) { this.val1 = val1; this.val2 = val2; } public T1 val1; public T2 val2; } class HashMapMultiple { public HashMapMultiple() { Map<String, Tuple2<Person, Person>> peopleByForename = new HashMap<>(); peopleByForename.put("Bob", new Tuple2<Person, Person>(new Person("Bob Smith"), new Person("Bob Jones"))); Tuple2<Person, Person> bobs = peopleByForename.get("Bob"); Person bob1 = bobs.val1; Person bob2 = bobs.val2; System.out.println("Bob1: " + bob1); System.out.println("Bob2: " + bob2); } public static void main(String[] args) { new HashMapMultiple(); } }
複数のマップ
import java.util.*; class Person { String name; public Person(String name) { this.name = name; } public String toString() { return this.name; } } class HashMapMultiple { public HashMapMultiple() { Map<String, Person> firstPersonByForename = new HashMap<>(); Map<String, Person> secondPersonByForename = new HashMap<>(); firstPersonByForename.put("Bob", new Person("Bob Smith")); secondPersonByForename.put("Bob", new Person("Bob Jones")); Person bob1 = firstPersonByForename.get("Bob"); Person bob2 = secondPersonByForename.get("Bob"); System.out.println("Bob1: " + bob1); System.out.println("Bob2: " + bob2); } public static void main(String[] args) { new HashMapMultiple(); } }
以上がJava HashMap の単一キーの下に複数の値を格納するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。