使用自定义比较器时最好使用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实现,因此弄清楚要使用哪个实现可能会造成混淆。这是一个快速流程图,可能有助于
从最常见的实现中进行选择