如何处理番石榴表中的碰撞?

时间:2013-11-13 09:59:36

标签: java guava

假设我们有一个带有简单 int count 字段的MyBean类,以及像这样的Guava表;

Table<Integer, Integer, MyBean> table; // we can instantiate like HashBasedTable.create();

我想对count字段求和,当我放入一个新的MyBean对象时,这个位置在表中有一个现有的MyBean对象。

table.put(1, 1, new MyBean(1)); 
table.put(1, 1, new MyBean(2)); // so what will be going on ?

实际上这是一个非常简单的案例,我想在碰撞时处理复杂的对象。

1 个答案:

答案 0 :(得分:4)

Table的行为与Map相似,即第二个put会覆盖第一个Multimap。你需要的是Multitable。已经有Table<Integer, Integer, SomeCollection<MyBean>> Map<SomePair<Integer, Integer>, MyBean> 投票给它。

目前,您可以使用

Map<Long, MyBean>

{{1}}

我推荐后者,因为组合键比处理“多”的东西更简单。


如果你今天感觉很酷,你甚至可以使用

{{1}}

请不要告诉任何人这是我的提议。并且正确地封装了hack,所以你不会被某些int咬到长时间的自动转换。