需要帮助在Java中映射此数据

时间:2010-12-16 00:07:50

标签: java map

我在映射此数据时遇到问题

          1           35
          1           30
          1           20
          2           10
          3           40
          3           25
          3           15

我尝试使用HashMap,但它只会映射到此数据的最后一次出现。

5 个答案:

答案 0 :(得分:8)

您描述的MapHashMap的行为是预期的行为,正如其他评论者所说。你想要的是一个多图。您可以自己滚动(不要这样做 - 其他评论者建议将地图映射到列表,但这很快变得很麻烦。如果您真的想要自己动手,请使用列表/设置值滚动您自己的通用多图并隐藏复杂性。 )或使用Guavamultimap。例如:

import com.google.common.collect.HashMultimap;
import com.google.common.collect.SetMultimap;

  public static void main(String[] args) 
  {
    final SetMultimap<Integer, Integer> foo = HashMultimap.create();
    foo.put( 1,35);
    foo.put(   1,30);
    foo.put(  1,20);
    foo.put(  2,10);
    foo.put(  3,40);
    foo.put(  3,25);
    foo.put(  3,15);
    System.out.println(foo);
  }

输出:

  

{1 = [35,20,30],2 = [10],3 = [25,40,   15]}

如果要访问这些值,有几种方法取决于您想要做什么。只需调用get(Integer key)即可返回值的集合。

另外,请查看this answer,其中引用了番石榴的许多相关优点。

答案 1 :(得分:6)

The documentation states

  

公共界面地图
  将键映射到值的对象。一个   map不能包含重复键;   每个键最多可以映射一个值。

相反,您可以将数字列表与每个键相关联。

答案 2 :(得分:4)

您可以使用Map<Long, List<Long>>(或您拥有的任何类型)来解决此问题。

答案 3 :(得分:2)

Map只有一个键的值。您可以使用Multimap中的Guava / Google Collections界面为密钥存储多个值。

答案 4 :(得分:0)

或创建一对&lt; F,S&gt;将它们放在一个列表中

列表与LT;对&LT;整数,整数&gt; &GT;