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