Компараторы часто трудно получить точно правильно, и ключ сравнения должен генерироваться для каждого сравнения, которое для большинства алгоритмов сортировки означает O (n log n). Другой подход заключается в создании пар (ключ, значение) для каждого элемента, который необходимо отсортировать, поместить их в TreeMap и затем запросить значения, поскольку они отсортированы по ключу.
Например
import java.util.Arrays;
import java.util.TreeMap;
public class Bar {
public static void main(String[] args) {
TreeMap<String, String> m2 = new TreeMap<String, String>();
for (String string : Arrays.asList(new String[] { "#3", "#2", "#1" })) {
String key = string.substring(string.length() - 1);
String value = string;
m2.put(key, value);
}
System.out.println(m2.values());
}
}
распечатывает
[#1, #2, #3]
Вы легко сможете адаптировать вычисления ключа к вашей проблеме.
Это вычисляет ключ только один раз для каждой записи, следовательно, O (n) - (но сортировка по-прежнему O (n log n)). Если вычисление ключа дорого или n велико, это может быть вполне измеримо.