В этой статье описываются два метода реализации для сортировки Java Custom для ArrayList. Поделитесь этим для вашей ссылки, следующим образом:
Реализация пользовательской сортировки списков в Java в основном использует два способа
1) Пусть класс объекта, который необходимо отсортировать, реализовать сопоставимый интерфейс, переопределить метод сравнения (до) и определить правила сортировки в нем. Затем вы можете напрямую вызовать collections.sort (), чтобы сортировать массив объектов
студент публичного класса реализует сопоставимые {private Int ID; частный int возраст; частный int height; Приватное название строки; Общественный студент (INT ID, название строки, int age, int height) {this.id = id; this.name = name; this.age = возраст; this.height = высота; } public int getId () {return id; } public int getage () {return Age; } public int getheight () {return Height; } public String getName () {return name; } public void setId (int id) {this.id = id; } public void setage (int age) {this.age = age; } public void setName (string name) {this.name = name; } public void setheight (int height) {this.height = height; } @Override public int compareto (Object O) {Студент S = (студент) O; if (this.age> s.age) {return 1; } else if (this.age <s.age) {return -1; } else {if (this.height> = s.height) {return 1; } else {return -1; }}}}Тестовый класс:
Import java.util.*; Общедоступный тест класса {public static void printdata (список <студента> список) {для (студент студента: список) {system.out.println ("номер студента:" + student.getid () + "Имя:" + student.getName () + "age" + student.getage () + "ehize:" + student.getheight ();); }} public static void main (string [] args) {list <toold> list = new ArrayList <> (); list.add (новый студент (1, "A", 20, 180)); list.add (новый студент (2, «B», 21, 175)); list.add (новый студент (3, "C", 22, 190)); list.add (новый студент (4, "D", 21, 170)); list.add (новый студент (5, "E", 20, 185)); System.out.println («До отсортированного»); printData (список); Collections.sort (список); System.out.println («после сортировки возраста и высоты»); printData (список); }}результат:
Перед отсортированным студентом номер: 1 Название: возраст 20 Рост: 180 Студент Номер: 2 Имя: B Возраст 21 Высот: 175 Студент Номер: 3 Имя: C возраст 22 Высот: 190 Студент Номер: 4 Имя: D Возраст 21 Высот: 170 Студенческий номер: 5 Имя: E возраст 20 Высот: 185 за возрастом и высотой. Сортировка Студента Номер: 1 Название: возраст 20 Высот. Имя: B Возраст 21 Выход: 175 Студент номер: 3 Имя: C возраст 22 Высот: 190
2) Реализуйте компаратор интерфейса компаратора, переписывайте метод сравнения и передайте его в сортировку в виде параметра
студент открытого класса {Private Int ID; частный int возраст; частный int height; Приватное название строки; Общественный студент (INT ID, название строки, int age, int height) {this.id = id; this.name = name; this.age = возраст; this.height = высота; } public int getId () {return id; } public int getage () {return Age; } public int getheight () {return Height; } public String getName () {return name; } public void setId (int id) {this.id = id; } public void setage (int age) {this.age = age; } public void setName (string name) {this.name = name; } public void setheight (int height) {this.height = height; }}Тестовый класс:
Import java.util.*; Общедоступный тест класса {public static void printdata (список <студента> список) {для (студент студента: список) {system.out.println ("номер студента:" + student.getid () + "Имя:" + student.getName () + "age" + student.getage () + "ehize:" + student.getheight ();); }} public static void main (string [] args) {list <toold> list = new ArrayList <> (); list.add (новый студент (1, "A", 20, 180)); list.add (новый студент (2, «B», 21, 175)); list.add (новый студент (3, "C", 22, 190)); list.add (новый студент (4, "D", 21, 170)); list.add (новый студент (5, "E", 20, 185)); System.out.println («До отсортированного»); printData (список); Collections.sort (List, новый компаратор <toold> () {@override public int compare (студент O1, студент O2) {if (o1.getage ()> = o2.getage ()) {return 1;} else {return -1;}}}); System.out.println («после сортировки возраста»); printData (список); Collections.sort (List, New Comporator <Tood> () {@Override public int compare (студент O1, студент O2) {if (o1.getage ()> o2.getage ()) {return 1;} else if (o1.getage () <o2.getage ()) {return -1;} els else {return -1;}}}}); System.out.println («после сортировки возраста и высоты»); printData (список); }}Результат вывода:
Перед отсортированным студентом номер: 1 Имя: A возраст 20 Высот: 180 Студент Номер: 2 Имя: B Возраст 21 Высот: 175 Студент Номер: 3 Имя: C возраст 22 Рост: 190 Студент Номер: 4 Имя: D Возраст 21 Рост: 170 Студенческий номер: 5 Название: E возраст 20 Высот: 185 после возраста. Сортированное. Возраст 21 Рост: 170 Студенческий номер: 3 Имя: C возраст 22 Высот: 190 после возраста и высота сортированный студенческий номер: 1 Название: возраст 20 Высот: 180 Студент Номер: 5 Имя: E возраст 20 Высот: 185 Студенческий номер: 4 Имя: D возраст 21 Высот: 170 Студенческий номер: 2 Имя: B Возраст 21 Высот: 175 Студенческий номер: 3 Имя: C возраст 22: 190: 190: 190: 190: 190: 190: 190: 190: 190: 190.
Из приведенных выше примеров мы видим, что сортировка стабильна. Я посмотрел исходный код Java Collections.sort . Он действительно реализован на основе стабильной сортировки и сортировки слияния. Он также был оптимизирован внутри, называется Timsort. (Для Timsort, пожалуйста, обратитесь к https://baike.baidu.com/item/timsort?fr=aladdin)
PS: Вот демонстрационный инструмент для вашей ссылки:
Онлайн -анимация демонстрации вставки/select/bubble/merge/hill/Quick Sorting Algoriting Algorithm Tool:
http://tools.vevb.com/aideddesign/paixu_ys
Для получения дополнительной информации об алгоритмах Java, читатели, которые заинтересованы в этом сайте, могут просмотреть темы: «Учебное пособие по структуре данных Java и алгоритм», «Сводка операции Java Dom Node», «Сводка Java File и каталог
Я надеюсь, что эта статья будет полезна для всех Java Programming.