Maison >Java >javaDidacticiel >Comment puis-je stocker plusieurs valeurs sous une seule clé dans un Java HashMap ?

Comment puis-je stocker plusieurs valeurs sous une seule clé dans un Java HashMap ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-22 21:24:21805parcourir

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

Stockage de plusieurs valeurs sous une seule clé dans un HashMap

Les cartes en Java associent des clés à des valeurs uniques, mais vous pouvez rencontrer le besoin de stocker plusieurs valeurs sous la même clé. Cette question explore comment obtenir cette fonctionnalité.

Carte avec liste comme valeur

Une approche consiste à utiliser une carte où la valeur est une liste. Cela vous permet de stocker plusieurs valeurs sous forme de liste associée à la clé. Cependant, cela a la limitation que la liste peut contenir n'importe quel nombre de valeurs, pas seulement deux.

Utilisation d'une classe Wrapper

Vous pouvez également créer une classe wrapper distincte qui contient les valeurs et place les instances de ce wrapper dans la carte. Cette approche nécessite de définir une classe et de créer des instances pour chaque clé, ce qui entraîne du code supplémentaire.

Approche basée sur les tuples

Si vous souhaitez appliquer un nombre fixe de valeurs , vous pouvez utiliser une classe tuple (souvent trouvée dans les bibliothèques ou en implémentant la vôtre). Les cartes peuvent ensuite stocker des tuples en tant que valeurs, garantissant ainsi une structure cohérente pour plusieurs valeurs sous une clé.

Cartes multiples

Une autre option consiste à utiliser plusieurs cartes, une pour chacune. valeur. Cette approche est simple mais peut introduire un risque de désynchronisation des cartes si elle n'est pas utilisée avec soin.

Exemples

Carte avec liste comme valeur

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();
  }
}

Utiliser un wrapper Classe

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();
  }
}

Approche basée sur les tuples

Cette approche nécessite une classe de tuple :

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();
  }
}

Cartes multiples

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();
  }
}

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn