【问题标题】:How to preserve the values ordering of a sorted map?如何保留排序地图的值顺序?
【发布时间】:2014-04-23 17:49:04
【问题描述】:

我有一个排序的地图,并希望按其对应键的顺序检索值。 IE。如果我的排序地图有 (1,6), (2,4), (3,1),我想检索 [6,4,1]。

有什么比像这样遍历排序的地图更快的方法吗?

SortedMap<Double, Double> sortedMap = new TreeMap<Double, Double>(sortedMap.size());
List<Double> values = new ArrayList<Double>();
for (Entry<Double, Double> entry : sortedMap.entrySet()) {
    values.add(entry.getValue());
}

我不认为只是做:

values = new ArrayList<Double>(sortedMap.values())

会起作用,因为 sortedMap.values() 返回一个集合,但不保证顺序,但迭代地图并没有让我觉得效率很高。

【问题讨论】:

标签: java list map


【解决方案1】:

sortedMap.values() 返回一个不保证顺序的集合

根据 SortedMap 的文档,顺序是有保证的,请参阅:

http://docs.oracle.com/javase/7/docs/api/java/util/SortedMap.html#values()

【讨论】:

  • "集合的迭代器按对应键的升序返回值。"
  • 这很棒。只是将鼠标悬停在 Eclipse 中的 .values() 上,向我展示了 Map 的 javadoc,而不是 SortedMap,这就是为什么我没有看到有关排序的部分。下次我会记得去实际的文档。
【解决方案2】:

为什么您认为遍历已排序的地图很慢?为了检索所有值,您最终必须遍历整个 Map。所以时间复杂度总是O(n)。

【讨论】:

  • 我假设(d)如果有可用的库调用,它可能会比手动迭代地图更优化。但这是一个很好的问题:我完全不确定这是一个很好的假设。
  • for-each 循环是遍历集合的最佳方式。此外,语言设计人员在设计 Java 集合的迭代器方面付出了很多努力,以确保它是循环任何集合的最快方式。我认为首先你需要分析一下性能是否真的很慢。
猜你喜欢
  • 2017-04-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-11
  • 2023-01-13
  • 1970-01-01
  • 2012-08-13
  • 1970-01-01
相关资源
最近更新 更多