使用多个值映射

时间:2013-11-05 11:59:03

标签: java map

如果可能的话,我基本上想要1个地图上的2个值或等价物。我想存储此信息

Map<K,V1,V2> sample = new HasMap<K,V1,V2>
(Key - caller) = 26
(value 1 - callee) = 55
(value 2 - seconds) = 550
sample(26,55,550)

我知道如何做到这一点的另一种方式是

  

地图(k,arraylist(v2))

将arraylist中的位置作为V1但是这将永远搜索我是否想要找到呼叫者称为特定被叫者的内容。

我也读过这个HashMap with multiple values under the same key,但我不明白该怎么做。

4 个答案:

答案 0 :(得分:2)

为您的值创建一个bean,如下所示

  class Value {
    VariableType val1;
    VariableType val2;
    ...
    }

然后我们可以创建如下的地图

Map<K,Value> valueSample = new HashMap<K,Value>();
valueSample .put(new K(), new Value());

我们需要通过setter或构造函数

设置Value calss中的值

答案 1 :(得分:0)

如果所有值均为<V1, V2>,则可以使用Entry作为值:

Map<K,Map.Entry<V1,V2>> sample = new HasMap<K,Map.Entry<V1,V2>>();

创建Entry<V1,V2>并将其与相关密钥放在一起。

另一个解决方案(甚至更好的解决方案)是创建自己的值类。

答案 2 :(得分:0)

你可以这样做。

  Map<Integer,List<Integer>> map = new HashMap<Integer,List<Integer>>();
  List<Integer> list =new ArrayList<Integer>();
  list.add(55);
  list.add(550);
  //Adding value to the map
  map.put(26, list);

  //getting value from map
  List<Integer> values = map.get(26);

答案 3 :(得分:0)

一种解决方案是创建一个包装器对象(在您的问题中的讨论链接中给出)来保存值v1 and v2

class ValueWrapper {
V1Type v1;
V2Type v2;
...
}

现在您可以将密钥映射到此包装器的实例:

Map<K,ValueWrapper> sample = new HashMap<K,ValueWrapper>();
sample.put(new K(), new ValueWrapper());