首页 >Java >java教程 >如何在 HashMap 中存储具有相同键的多个值?

如何在 HashMap 中存储具有相同键的多个值?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-12-09 02:01:09429浏览

How to Store Multiple Values with the Same Key in a HashMap?

创建每个键有多个值的 HashMap

在某些情况下,可能需要在 HashMap 中存储具有相同键的多个值。尽管 Java 的 HashMap 本身并不支持此功能,但有几种替代方法可以实现此功能。

1.以列表作为值的映射

一种选择是创建一个 HashMap,其中值是列表。这允许多个值与单个键关联。例如:

Map<String, List<Person>> peopleByForename = new HashMap<>();

2。包装类

另一种方法是定义一个保存多个值的包装类。然后,这个包装器可以用作 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。元组

如果您的编程语言支持元组,您可以将它们用作 HashMap 中的键或值。例如:

Map<String, Tuple2<Person, Person>> peopleByForename = new HashMap<>();

4。多个映射

最后,另一种策略是为每个值类型使用单独的映射:

Map<String, Person> firstPersonByForename = new HashMap<>();
Map<String, Person> secondPersonByForename = new HashMap<>();

示例

考虑示例具有 userId、clientID 和的 HashMap 的场景timeStamp:

选项 1:以列表作为值的映射

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

选项 2:包装类

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

方法的选择取决于您的应用程序的具体要求和所使用的编程语言。

以上是如何在 HashMap 中存储具有相同键的多个值?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn