¿Es mejor usar un TreeSet o ArrayList cuando se usa un comparador personalizado?
He implementado un gráfico. Quiero ordenar un subconjunto dado de vértices con respecto a sus grados. Por lo tanto, he escrito un comparador personalizado llamadoDegreeComparator
.
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());
}
}
Entonces, ¿cuál de los siguientes es más eficiente?
UtilizandoTreeSet
public Collection<Integer> sort(Collection<Integer> unsorted)
{
Set<Integer> sorted = new TreeSet<Integer>(new DegreeComparator());
sorted.addAll(unsorted);
return sorted;
}
UtilizandoArrayList
Collections.sort(unsorted, new DegreeComparator());
Observe que el segundo enfoque no es una función, sino un código de una línea.
Intuitivamente, prefiero elegir el segundo. Pero no estoy seguro si es más eficiente.