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