java - 使用自定义比较器时使用 TreeSet 还是 ArrayList 更好

标签 java performance sorting arraylist set

我已经实现了一个图表。 我想根据顶点的度数对给定的顶点子集进行排序。 因此,我编写了一个名为 DegreeComparator 的自定义比较器。

private class DegreeComparator implements Comparator<Integer>
{
    @Override
    public int compare(Integer arg0, Integer arg1) 
    {
        if(adj[arg1].size() == adj[arg0].size()) return arg1 - arg0;
        else return adj[arg1].size() - adj[arg0].size());
    }

}

那么,下面哪一个更有效?

使用TreeSet

public Collection<Integer> sort(Collection<Integer> unsorted)
{
    Set<Integer> sorted = new TreeSet<Integer>(new DegreeComparator());
    sorted.addAll(unsorted);
    return sorted;
}

使用ArrayList

Collections.sort(unsorted, new DegreeComparator());

请注意,第二种方法不是函数,而是单行代码。

凭直觉,我宁愿选择第二个。但我不确定它是否更有效率。

最佳答案

enter image description here Java API 包含大量的 Collection 和 Map 实现,因此可能会混淆使用哪一个。这是一个快速流程图,可能有助于从最常见的实现中进行选择

关于java - 使用自定义比较器时使用 TreeSet 还是 ArrayList 更好,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24371204/

相关文章:

java - 有没有比使用 Java 的 BigInteger 类更有效的处理大数的方法?

c# - C# 中空 ";"语句的性能问题

php - 为什么在以下情况下内部数组元素没有按时间戳值的降序排序?

java - 根据其中一个字段对对象列表进行排序

java - 更改将 double 写入 CSV 的 Java 代码以将 double[] 写入 CSV(用例 = WEKA 库)

java - Android NDK : JNI GetMethodID called with pending exception java. lang.ClassNotFoundException:未找到类

linux - 确定在 linux 中读取文件的最佳缓冲区大小

symfony - 使用 KnpPaginator 排序

java - 有没有比使用反射通过继承层次结构中的工厂方法实例化元素更好的方法?

php - 是什么导致服务器出现 60,000 毫秒的延迟