2010-12-16 56 views
4

相关帮助映射这个数据我有问题映射这个数据需要的Java

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

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

回答

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,其中引用了许多相关的善良在番石榴。

6

The documentation states

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

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

4

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

0

或者创建一个对< F,S>类,并把它们放在一个列表

列表<对<整数,整数>>