Heim >Java >javaLernprogramm >Wie kann ich in einer Java HashMap mehrere Werte unter einem einzigen Schlüssel speichern?

Wie kann ich in einer Java HashMap mehrere Werte unter einem einzigen Schlüssel speichern?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-22 21:24:21754Durchsuche

How can I store multiple values under a single key in a Java HashMap?

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn