java - 添加到集合然后对其进行排序或添加到已排序的集合中是否更快?

标签 java sorting collections

如果我有这样的 Map:

HashMap<Integer, ComparableObject> map;

我想获得一个使用自然排序排序的值的集合,哪种方法最快?

(A)

创建像 ArrayList 这样的可排序集合的实例,添加值,然后对其进行排序:

List<ComparableObject> sortedCollection = new ArrayList<ComparableObject>(map.values());
Collections.sort(sortedCollection);

(B)

创建一个有序集合的实例,例如 TreeSet,然后添加值:

Set<ComparableObject> sortedCollection = new TreeSet<ComparableObject>(map.values());

请注意,生成的集合永远不会被修改,因此排序只需要进行一次。

最佳答案

TreeSet 为 add()/remove()/contains() 方法提供 log(n) 时间复杂度保证。 对 ArrayList 进行排序需要 n*log(n) 操作,但 add()/get() 只需要 1 操作。

所以如果你主要是检索,并且不经常排序,ArrayList 是更好的选择。如果您经常排序但不检索那么多 TreeSet 将是一个更好的选择。

关于java - 添加到集合然后对其进行排序或添加到已排序的集合中是否更快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3607593/

相关文章:

java - 可以用 TOAD 编写 java 程序吗?

javascript - 按日期顺序对nodejs中的数组进行排序(从最近到最旧)

c - 排序算法的c实现

java - 如何在 map 值是集合的情况下按值大小对 map 条目进行排序?

scala - 如何根据特定条件优雅地提取列表范围?

java - 时间戳转换器

java - 将对象引用传递给 Intent

javascript - 将 spring java 对象传递给 javascript

PHP 比较两个数组 : Same values, 的简单方法,无论顺序如何

java - 在 Spring 中使用 @Configuration 创建一个 bean 集合