Сортировка может оказаться непростой задачей, особенно если ваш список
Для начала выберем, чем будем заполнять наш
Затем определим реализацию интерфейса
List
содержит не примитивные числовые типы данных, а их объектные «обёртки» (Byte
, Integer
, Short
, Long
, Double
, Float
). Предлагаю воспользоваться методом, который может быть весьма полезным для решения простых задач или ответа на вопрос интервьюера.

List
. В этом примере я буду использовать список рёбер графа (Edges
) из простой структуры данных Graph
:
// Очень простой класс Edge (рёбро графа)
public class Edge {
public Vertex src;
public Vertex dst;
public double cost;
// создание ребра между двух вершин
Edge(Vertex s, Vertex d, double c) {
src = s;
dst = d;
cost = c;
}
}
// Список рёбер
Edge[] edges = graph.getEdges();
Что такое граф? В дискретной математике граф определяют как пару множеств ( Вероятно, тем, кто не привык к математическим абстракциям, такое определение будет не очень понятно, поэтому скажем проще: граф — это совокупность вершин и рёбер, их соединяющих. Хороший пример графа, который сразу перенесёт его из области абстракции в сферу материального — карта железнодорожных путей. Вершины такого графа — станции. Ну а пути между ними — рёбра. |
java.util.Comparator
:
class SortByCost implements Comparator<Edge> {
public int compare(Edge a, Edge b) {
if ( a.cost < b.cost ) return -1;
else if ( a.cost == b.cost ) return 0;
else return 1;
}
}
В этом примере мы будем сортировать ребра графа по их весу или по расстоянию от вершины src (source) до вершины dst (destination).
Наконец, используем стандартный метод java.util.Arrays.sort ()
:
Arrays.sort(edges, new SortByCost())
Теперь наш лист, заполненный объектами Edges
отсортирован в порядке возрастания (от наименьшего к наибольшему).
Автор решения — Этан Эрровуд (Ethan Arrowood).
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ