【问题标题】:Store two values in HashMap value在 HashMap 值中存储两个值
【发布时间】:2019-09-17 13:33:12
【问题描述】:

我想在 hashMap 的 value 字段中存储两个值。

例如:

Key = 100, Value = 10, 20

我想以某种方式存储,以便我可以使用 key 修改 hashMap Value 值?

假设如果我想将 10 修改为 30,那么地图中的条目将是

Key = 100, Value = 30, 20

有什么办法让我可以使用 hashmap 的键独立控制两个 Value 值 ..?

【问题讨论】:

  • put 返回旧值,因此`new HashMap().put("A", 1)` 将评估为(Integer)null,因为没有以前的值映射到"A"。一般来说,你应该重新考虑你的编码风格。
  • 版主注意:不要完全更改您的问题,因为它会使现有答案无效。相反,发布一个新问题,并在需要时链接到该问题。

标签: java collections hashmap


【解决方案1】:

你可以使用com.google.common.collect.Multimap

例子:

Multimap<Integer, Integer> map = ArrayListMultimap.create();
map.put(100, 10);
map.put(100, 20);

【讨论】:

    【解决方案2】:
    Map<Integer, Set<Integer>> dualValueMap = new HashMap<>();
        Set<Integer> s1 = new HashSet<>();
        s1.add(10);
        s1.add(20);
        dualValueMap.put(100, s1);
    

    【讨论】:

      【解决方案3】:

      我也提倡使用#computeIfAbsent:

      Map<Integer, List<Integer>> map = new HashMap<>();
      List<Integer> values = map.computeIfAbsent(100, k -> new ArrayList<>());
      values.add(10);
      values.add(20);
      //100 -> [10, 20]
      

      您可以抽象方法后面的#computeIfAbsent 调用,以确保您始终拥有有效的列表值。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-02-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-08-18
        • 2014-05-20
        相关资源
        最近更新 更多