使用自定义比较器时最好使用TreeSet或ArrayList


问题内容

我已经实现了一个图形。我想针对顶点
的度对给定的顶点子集进行排序。因此,我编写了一个名为的自定义比较器
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());
    }

}

So, which one of the below is more efficient?

UsingTreeSet

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

UsingArrayList

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

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

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


问题答案:

Java API包含许多Collection和Map实现,因此弄清楚要使用哪个实现可能会造成混淆。这是一个快速流程图,可能有助于
从最常见的实现中进行选择