Heim >Java >javaLernprogramm >Wie kann ich in einer Java HashMap mehrere Werte unter einem einzigen Schlüssel speichern?
Mehrere Werte unter einem einzelnen Schlüssel in einer HashMap speichern
Maps in Java verknüpfen Schlüssel mit einzelnen Werten, es kann jedoch sein, dass dies erforderlich ist Speichern Sie mehrere Werte unter demselben Schlüssel. In dieser Frage wird untersucht, wie diese Funktionalität erreicht werden kann.
Karte mit Liste als Wert
Ein Ansatz besteht darin, eine Karte zu verwenden, bei der der Wert eine Liste ist. Dadurch können Sie mehrere Werte als Liste speichern, die dem Schlüssel zugeordnet ist. Dies hat jedoch die Einschränkung, dass die Liste eine beliebige Anzahl von Werten enthalten kann, nicht nur zwei.
Verwenden einer Wrapper-Klasse
Sie können auch eine separate Wrapper-Klasse erstellen das die Werte enthält und Instanzen dieses Wrappers in der Karte platziert. Dieser Ansatz erfordert die Definition einer Klasse und das Erstellen von Instanzen für jeden Schlüssel, was zu zusätzlichem Code führt.
Tupelbasierter Ansatz
Wenn Sie eine feste Anzahl von Werten erzwingen möchten , können Sie eine Tupelklasse verwenden (häufig in Bibliotheken zu finden oder indem Sie Ihre eigene implementieren). Karten können dann Tupel als Werte speichern und so eine konsistente Struktur für mehrere Werte unter einem Schlüssel gewährleisten.
Mehrere Karten
Eine andere Möglichkeit besteht darin, mehrere Karten zu verwenden, eine für jede Wert. Dieser Ansatz ist unkompliziert, birgt jedoch möglicherweise das Risiko, dass die Karten nicht mehr synchron sind, wenn sie nicht sorgfältig behandelt werden.
Beispiele
Karte mit Liste als Wert
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(); } }
Verwenden eines Wrappers Klasse
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(); } }
Tupelbasierter Ansatz
Dieser Ansatz erfordert eine Tupelklasse:
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(); } }
Mehrere Karten
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(); } }
Das obige ist der detaillierte Inhalt vonWie kann ich in einer Java HashMap mehrere Werte unter einem einzigen Schlüssel speichern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!