【问题标题】:Is there a BiMap implementation with predictable iteration ordering (insertion order)?是否有具有可预测迭代顺序(插入顺序)的 BiMap 实现?
【发布时间】:2014-12-12 21:22:59
【问题描述】:

标准库LinkedHashSet 是提供插入顺序迭代的HashSet。是否有 Guava 的 BiMap 版本可以维护键和值的插入顺序迭代?我确实需要 BiMap 是可变的,所以 ImmutableBiMap 不足以满足我的目的。

【问题讨论】:

  • 嗯,应该如何定义插入顺序?我认为钥匙应该?
  • 我会接受键排序,但是键和值放在一起,如果您尝试将现有值放入不同的键下,则会引发异常,所以我认为没有实际区别。
  • 您可以使用两个链接的哈希图自己实现 guava 的 bimap 接口。可能不太难做到。

标签: java guava bimap


【解决方案1】:

唯一可用的实现是ImmutableBiMap<K,V>。您可以检查实现here。 您可以使用LinkedHashMap 并将其转换为copyOf(Map<? extends K,? extends V> map) 以使其成为ImmutableBiMap<K,V>。它对你有用吗?

【讨论】:

  • 谢谢,但它没有帮助。我想要一个易于使用的 BiMap,但它需要是可变的。如果我维护不同的集合类型(或类型,例如两个地图),那么我根本不需要 BiMap。
  • 好的,杰克,但没有番石榴解决方案对不起
【解决方案2】:

您可以获取键集,将其转换为数组,然后像这样遍历数组:

Object[] keys = someBiMap.keySet().toArray();
for(Object key : keys) {
    Object entry = someBiMap.get(key);
}

这不是一个很好的解决方案,但它是我为这个问题找到的唯一解决方案

【讨论】:

  • keySet 返回一个Set,因此它不能保证插入顺序。对于HashBiMap,它们几乎从不按插入顺序排列。
猜你喜欢
  • 2016-02-27
  • 2017-07-24
  • 1970-01-01
  • 2012-12-19
  • 2012-09-17
  • 1970-01-01
  • 1970-01-01
  • 2017-06-27
相关资源
最近更新 更多