【问题标题】:Adding key-value pairs to TreeMap in value sorted order按值排序顺序将键值对添加到 TreeMap
【发布时间】:2016-09-16 18:21:58
【问题描述】:

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

举个例子:

苹果,2
香蕉,20
橙色,5

它应该在树中:

苹果,2
橙色,5
香蕉,20

【问题讨论】:

  • TreeMap 的 javadoc 是明确的:A Red-Black tree based NavigableMap implementation. The map is sorted according to the natural ordering of its keys, or by a Comparator provided at map creation time, depending on which constructor is used. 所以它只按键排序,除非您提供比较器。话虽如此,您可以只使用带有自定义比较器的 TreeMap,除非这也是不允许的。

标签: java sorting collections treemap


【解决方案1】:

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

[key, value] -> value

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

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

PS:当然,您将无法再使用此地图通过原始键查找值。它仅对排序键值对有用。这样一来,使用带有键值对作为元素的 TreeSet 会更好。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    • 1970-01-01
    • 2015-08-25
    • 2022-12-09
    • 1970-01-01
    • 2011-12-09
    相关资源
    最近更新 更多