创建每个键有多个值的 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中文网其他相关文章!