2016-09-16 77 views
0

假设键值对来自一个流,并且我们逐个读取它们并将它们添加到需要按值排序的TreeMap然后键,我怎么能做到这一点?我不是在讨论任何中间映射,我可以使用它轻松编写比较器,从该映射中获取相应的值并在排序逻辑中使用它。它是不允许的。直接,它是如何可能的。如果不使用其他数据结构,我不认为它是可能的。或者我在某处愚弄它?任何建议!按照值排序的顺序将键值对添加到TreeMap中

借此例如:

苹果,2
香蕉,20
橙,5

它应该是在树为:

苹果,2
orange,5
b anana,20

+0

TreeMap的javadoc是显式的:'基于红黑树的NavigableMap实现。该地图根据其按键的自然排序,或由地图创建时提供的比较器进行排序,具体取决于使用哪个构造函数。“因此,除非您提供比较器,否则仅按键进行排序。这就是说,你可以使用带有自定义比较器的TreeMap,除非这也是不允许的。 – Taylor

回答

0

如果只允许使用其他结构,那么我会在树形图中使用包含原始键和值的合成键。在这种情况下,你会碰到这样的:

[key, value] -> value 

,因为你在这两个地方是指相同的值对象时,它不会使用更多的内存。它需要有自定义的比较器来比较合成键的值部分。

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

PS:当然,您将无法使用此地图通过原始键找到价值。它只能用于对键值对进行排序。通过这种方式,使用TreeSet和键值对作为元素会更好。