-->

Java的。 有序映射由值[重复](Java. Sorted map by value [dup

2019-07-04 01:22发布

可能重复:
如何在Java中的值进行排序的Map <键,值>?

我需要有序映射像TreeMap的,而是由值排序。 我的地图将是巨大的,所以我不能只是排序我的地图我随时需要。 有什么好的解决方案来解决这个问题呢? 也许存在谁满足了这种外部罐子?

Answer 1:

有许多的方式来满足您的要求。 正如你所随后澄清说,你可能在你的当前副本对象TreeMap ,也许你可以取代你的TreeMap与第三方多重映射 ( 番石榴 , 阿帕奇百科全书集合 ),然后交换你的关键字和值左右-即替代TreeMap<Key, Value>Multimap<Value, Key> 。 根据你的情况的细节,我相信这代表了你工作的好机会。



Answer 2:

如果您使用的是TreeMap维持自己价值的指标,即你正在使用它主要是为了快速找到一个给定键的匹配值,你可以做的另一件事是保持2层数据结构:

  • TreeMap ,你现在正在使用的索引
  • 一个PriorityQueue (或其他排序列表)遍历在有序你的价值观

然后,只需添加当你有任何更改删除值两份名单。 对于这一点,你就不会需要保留值的两个副本要么左右。 您只需现在可以添加你有一个副本两份名单,因为仅列出与引用你的价值观工作。



Answer 3:

这里根本不存在任何数据结构,可以有效地做到这一点:你必须保持一个数据结构,使得它有效地通过按键来查找和排序的值使之更难以保持这种结构。

如果它的创建后不修改地图,虽然,那么你可以做这样的事情:

List<Map.Entry<Key, Value>> list = new ArrayList<Map.Entry<Key, Value>>(
    map.entrySet());
Collections.sort(list, new Comparator<Map.Entry<Key, Value>>() {
  public int compare(Map.Entry<Key, Value> e1, Map.Entry<Key, Value> e2) {
    return e1.getValue().compareTo(e2.getValue());
  }
});
Map<Key, Value> sortedByValues = new LinkedHashMap<Key, Value>();
for (Map.Entry<Key, Value> entry : list) {
  sortedByValues.put(entry.getKey(), entry.getValue());
}

得到的LinkedHashMap的遍历会在排序的价值秩序。



Answer 4:

如果您的数据是唯一的,你可以在其中持有Set这将是按升序迭代(假设你实现Comparable )。

然后你把你的Map分别比不只是抱着原来要额外收费Map



文章来源: Java. Sorted map by value [duplicate]