Сортировка может оказаться непростой задачей, особенно если ваш список
Для начала выберем, чем будем заполнять наш
Затем определим реализацию интерфейса
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).
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ