Guava:保持插入顺序的HashBasedTable?

时间:2014-03-20 23:33:18

标签: java guava

我需要一种方法来保留一个值的两个键 - 正是Guavan的HashBasedTable所做的。问题是它在迭代值时不保留插入顺序。是否有任何优雅的解决方案让它工作?它不一定是Guava,但我不想让依赖的项目膨胀。

我正在尝试使用提到的ImmutableTable - 我还没有找到任何例子。在构建这样的表时,我到处都是NPE:

ImmutableTable<String, String, AbstractUnit> units;
ImmutableTable.Builder<String, String, AbstractUnit> builder =        units.builder();
builder.put(unit1.getType(), unit1.getName(), unit1);
...
units = builder.build();

当gettinb units.values()时,我将获得NPE。另外,我能否在表格中修改AbstractUnit的值?

3 个答案:

答案 0 :(得分:10)

您可以为表格指定后端地图结构。指定LinkedHashMap将保持插入顺序。

 Table<String,String,AbstractUnit> units = Tables.newCustomTable(new LinkedHashMap<>(), LinkedHashMap::new); 

我尝试使用@Louis Wasserman所描述的ImmutableMap,而是采用自然顺序。

答案 1 :(得分:2)

ImmutableTable将像所有其他不可变集合一样维护插入顺序。

答案 2 :(得分:0)

自Guava 20.0起,HashBasedTable保持插入顺序。具体来说:

  

使用链接的哈希表实现表格。这样可以保证各种视图的迭代顺序可以预测。

内部具有LinkedHashMap的支持。