以值排序顺序将键值对添加到TreeMap

时间:2016-09-16 18:21:58

标签: java sorting collections treemap

假设键值对来自流,我们逐个读取它们并将它们添加到需要按值然后键排序的TreeMap中,我该如何实现?我不是在谈论任何中间地图,使用它我可以轻松地编写一个Comparator来从这个地图中获取相应的值并在排序逻辑中使用它。这是不允许的。直接,它是如何可能的。我不认为它可能不使用其他数据结构。或者我在某个地方搞砸了?任何建议!

举个例子:

  

apple,2
  香蕉,20
  橙色,5

它应该在树中:

  

apple,2
  橙色,5
  香蕉,20

1 个答案:

答案 0 :(得分:0)

如果不允许使用其他结构,那么我将在树形图中使用包含原始密钥和数据源值的合成密钥。在这种情况下,您将拥有类似的内容:

[key, value] -> value

由于您在两个地方引用相同的值对象,因此它不会使用更多内存。它需要有自定义比较器,用于比较合成键的值部分。

所以最后你必须再定义两个类。

PS:当然,您不能再使用此地图通过原始密钥查找价值了。它只对订购键值对有用。通过这种方式,使用带有键值对的TreeSet作为元素会更好。