我在映射此数据时遇到问题
1 35
1 30
1 20
2 10
3 40
3 25
3 15
我尝试使用HashMap,但它只会映射到此数据的最后一次出现。
答案 0 :(得分:8)
您描述的Map
和HashMap
的行为是预期的行为,正如其他评论者所说。你想要的是一个多图。您可以自己滚动(不要这样做 - 其他评论者建议将地图映射到列表,但这很快变得很麻烦。如果您真的想要自己动手,请使用列表/设置值滚动您自己的通用多图并隐藏复杂性。 )或使用Guava的multimap。例如:
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)
答案 2 :(得分:4)
您可以使用Map<Long, List<Long>>
(或您拥有的任何类型)来解决此问题。
答案 3 :(得分:2)
Map
只有一个键的值。您可以使用Multimap
中的Guava / Google Collections界面为密钥存储多个值。
答案 4 :(得分:0)
或创建一对&lt; F,S&gt;将它们放在一个列表中
列表与LT;对&LT;整数,整数&gt; &GT;