¿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.

Respuestas a la pregunta(3)

Su respuesta a la pregunta