JavaRush /Java блог /Random UA /Використання Java Arrays.sort() для будь-якого списку об'...

Використання Java Arrays.sort() для будь-якого списку об'єктів

Стаття з групи Random UA
Сортування може виявитися непростим завданням, особливо якщо ваш список Listмістить не примітивні числові типи даних, які об'єктні «обгортки» ( Byte, Integer, Short, Long, Double, Float). Пропоную скористатися методом, який може бути корисним для вирішення простих завдань або відповіді на запитання інтерв'юера. Використання Java Arrays.sort() для будь-якого списку об'єктів - 1Для початку виберемо, чим заповнюватимемо наш 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();

Що таке граф?

У дискретній математиці граф визначають як пару множин ( V, E), де V- підмножина довільної лічильного множини, а E- підмножина ( VхV).

Ймовірно, тим, хто не звик до математичних абстракцій, таке визначення буде не дуже зрозумілим, тому скажемо простіше:

граф - це сукупність вершин і ребер, що їх з'єднують. Хороший приклад графа, який одразу перенесе його з галузі абстракції у сферу матеріального — карта залізничних колій.

Вершини такого графа – станції . Ну а шляхи між ними — ребра .

Потім визначимо реалізацію інтерфейсу 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).
Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ