Maison >Java >javaDidacticiel >Comment stocker plusieurs valeurs avec la même clé dans un HashMap ?

Comment stocker plusieurs valeurs avec la même clé dans un HashMap ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-09 02:01:09389parcourir

How to Store Multiple Values with the Same Key in a 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!

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