Maison >Java >javaDidacticiel >Comment stocker plusieurs valeurs avec la même clé dans un HashMap ?
Création de HashMaps avec plusieurs valeurs par clé
Dans certains scénarios, il peut être nécessaire de stocker plusieurs valeurs avec la même clé dans un HashMap . Bien que HashMap de Java ne prenne pas en charge cela de manière native, il existe plusieurs approches alternatives pour obtenir cette fonctionnalité.
1. Carte avec liste comme valeur
Une option consiste à créer un HashMap où les valeurs sont des listes. Cela permet d'associer plusieurs valeurs à une seule clé. Par exemple :
Map<String, List<Person>> peopleByForename = new HashMap<>();
2. Classe Wrapper
Une alternative consiste à définir une classe wrapper qui contient les multiples valeurs. Ce wrapper peut ensuite être utilisé comme valeur dans le HashMap :
class Wrapper { private Person person1; private Person person2; public Wrapper(Person person1, Person person2) { this.person1 = person1; this.person2 = person2; } // Getter methods } Map<String, Wrapper> peopleByForename = new HashMap<>();
3. Tuples
Si votre langage de programmation prend en charge les tuples, vous pouvez les utiliser comme clés ou valeurs dans un HashMap. Par exemple :
Map<String, Tuple2<Person, Person>> peopleByForename = new HashMap<>();
4. Cartes multiples
Enfin, une autre stratégie consiste à utiliser des cartes distinctes pour chaque type de valeur :
Map<String, Person> firstPersonByForename = new HashMap<>(); Map<String, Person> secondPersonByForename = new HashMap<>();
Exemples
Considérant l'exemple scénario d'un HashMap avec un userId, un clientID et timeStamp :
Option 1 : Carte avec liste comme valeur
Map<Integer, List<Pair<String, Long>>> data = new HashMap<>(); data.put(1, Arrays.asList(new Pair<>("client-1", System.currentTimeMillis()))); data.put(1, Arrays.asList(new Pair<>("client-2", System.currentTimeMillis())));
Option 2 : Classe Wrapper
class Data { private Integer userId; private String clientID; private Long timeStamp; public Data(Integer userId, String clientID, Long timeStamp) { this.userId = userId; this.clientID = clientID; this.timeStamp = timeStamp; } } Map<Integer, Data> data = new HashMap<>(); data.put(1, new Data(1, "client-1", System.currentTimeMillis())); data.put(1, new Data(1, "client-2", System.currentTimeMillis()));
Le choix de l'approche dépend des exigences spécifiques de votre application et du langage de programmation utilisé.
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!