Часто необходимо сортировать списки из списка <string> для сортировки пользовательских классов. Не нужно слияние или сортировку самостоятельно. Просто реализуйте один интерфейс.
Эта статья сначала представит использование коллекций для сортировки списка <string> , а затем расскажет о принципе сбора. Спорт.
Давайте поговорим о том, как сортировать пользовательские занятия.
Наконец , будет введен еще один метод сортировки пользовательских объектов с использованием сортировки коллекций, и эти два сорта являются простым сравнением производительности.
1. Принцип списка сортировки <string> и collections.sort
Код выглядит следующим образом
Список <string> stringlist = new ArrayList <string> (); stringlist.add ("Nice"); stringlist.add ("Delicious"); stringlist.add ("ablet"); stringlist.add ("moon"); stringlist.add ("try"); stringlist.add ("Друг"); Collections.sort (StringList); for (string str: stringlist) {system.out.println (str); }Где коллекции java.util.collections.
Проверьте реализацию сорта в коллекциях
@Suppresswarnings ("unchecked") public static <t расширяется сопоставимо <? Super t >> void sort (list <t> list) {object [] array = list.toarray (); Arrays.sort (массив); int i = 0; ListIterator <t> it = list.listiterator (); while (it.hasnext ()) {it.next (); it.set ((t) массив [i ++]); }}Из этого мы видим, что сортировочное тело - это Arrays.sort (массив); Реализация массивов сортирует
public static void sort (Object [] Array) {// начинать Android-изменяемый comparateTimsort.sort (массив); // конец Android-измененный}Продолжайте отслеживать, ComparateTimsort Sort реализация CompaleTimsort.sort
Статическая void sort (Object [] a) к статической void sort (Object [] a, int lo, int hi) к частному статическому бинарноскорту (объект [] a, int lo, int hi, int start). В бинарном составе часть, используемая для сравнения размеров
Сопоставимо <object> pivot = (сопоставимо) a [start]; int left = lo; int right = start; Утверждайте влево <= справа; while (слева <справа) {int mid = (слева + справа) >>> 1; if (pivot.compareto (a [mid]) <0) right = mid; еще слева = середина + 1; }Сравнение объекта будет вызвано для сравнения. По умолчанию типы строк и целочисленных целого числа были переопределены методом сравнения. Итак, вы можете сравнить это самостоятельно
2. Сравнение пользовательских классов
Благодаря вышеупомянутому введению мы понимаем принцип сортировки коллекций. Следующее предназначено для представления сортировки пользовательских объектов. Сначала проверьте принцип сравнения целочисленного и строки, а затем представите, как сравнивать пользовательские классы.
2.1 Мы проверили реализацию объекта и обнаружили, что нет метода сравнения.
Посмотрите на целочисленное определение
Public Final Class Integer расширяет числовые реализации сопоставимо <Integer>
Давайте посмотрим на определение строки
Public Final Class String реализует java.io.serializable, сопоставимый <string>, charequence
Мы можем обнаружить, что все они наследуют от сопоставимых
2.2 Просмотреть сопоставимый интерфейс
Вы можете обнаружить, что в сопоставимым есть только один метод
Код Java
public int compareto (t o);
Другими словами, метод бинарного сорта фактически вызывает сопоставимый метод сравнения, чтобы знать, что до тех пор, пока он унаследован от сопоставимого,
И реализовать CompareTo для вызова collections.sort для сортировки пользовательских объектов
2.3 Сравнение пользовательских классов
Следующий код - сортировать пользователя. Во -первых, сортируйте по имени один за другим. Если имена одинаковы, сортируют от малого до большого по возрасту.
Код Java
public Class maintest {public static void main (string [] args) {list <user> userlist = new ArrayList <user> (); userlist.add (новый пользователь ("Люси", 19)); userlist.add (новый пользователь ("Джек", 19)); userlist.add (новый пользователь ("Jim", 19)); userlist.add (новый пользователь ("Джеймс", 19)); userlist.add (новый пользователь («Herry», 19)); userlist.add (новый пользователь ("Luccy", 19)); userlist.add (новый пользователь («Джеймс», 18)); userlist.add (новый пользователь («Herry», 20)); Collections.sort (пользовательский список); для (пользователь пользователя: userlist) {System.out.println (user.getName () + "/t/t" + user.getage ()); / частный int возраст; public User (String name, int age) {this.name = name; this.age = возраст; } @Override public int compareTo (пользователь другой) {int compareName = this.name.compareto (orever.getName ()); if (сравнение == 0) {return (this.age == shrection.getage ()? 0: (this.age> oremon.getage ()? 1: -1)); } return CompareName; } public String getName () {return name; } public int getage () {return Age; }}}После выполнения вывод:
XML -код:
Херри 19 Херри 20 Джек 19 Джеймс 18 Джеймс 19 Джим 19 Люси 19 Люси 19
Можно видеть, что необходимы только две точки
а Унаследован от сопоставимого
Код Java
Приватный статический класс Пользователь Реализации сопоставимо <Пользователь>
беременный Реализовать метод сравнения
Вышеуказанное общедоступное сравнение (пользователь другой) является предметом сравнения
Вы можете увидеть, что int сравнение = this.name.compareto (orever.getName ()); означает название сравнения
Если он больше, чем или возвращен 1, он равен возвращению 0, и если это меньше, то это вернет -1 .
Если равны, сравните в соответствии с размером возраста.
Вышеуказанное больше или равное возврату 1, а вышеупомянутое меньше, чем возврат -1, что также является основой для сравнения бинарного состава.
3. Используйте перегруженную функцию сортировки коллекций для сортировки пользовательских объектов
Код выглядит следующим образом, и имена все еще сравниваются сначала, если они равны, то возрастной выпуск сравнивается
Код Java
public Class maintest {public static void main (string [] args) {list <user> userlist = new ArrayList <user> (); userlist.add (новый пользователь ("Люси", 19)); userlist.add (новый пользователь ("Джек", 19)); userlist.add (новый пользователь ("Jim", 19)); userlist.add (новый пользователь ("Джеймс", 19)); userlist.add (новый пользователь («Herry», 19)); userlist.add (новый пользователь ("Luccy", 19)); userlist.add (новый пользователь («Джеймс», 18)); userlist.add (новый пользователь («Herry», 20)); Collections.sort (userlist, новый компаратор <user> () {public int compare (user user1, user user2) {int compareName = user1.getName (). Compareto (user2.getName ()); if (compareName == 0) {return (user1.getge () == user2.getage ()? Сравнение;}}); для (пользователь пользователя: userlist) {System.out.println (user.getName () + "/t/t" + user.getage ()); }} частный статический класс пользователь {private String name; частный int возраст; public User (String name, int age) {this.name = name; this.age = возраст; } public String getName () {return name; } public int getage () {return Age; }}}Вы можете увидеть это
Код Java
Collections.sort (пользовательский список, новый компаратор <user> ())
Это предмет сравнения и реализует метод сравнения компаратора. Ниже приведен принцип этого метода
Отслеживание коллекций
Код Java
public static <t> void sort (список <t> list, компаратор <? Super t> c)
приезжать
Код Java
Public Static <t> void sort (t [] a, компаратор <? Super t> c)
приезжать
Код Java
Private Static Void Mergesort (Object [] src, Object [] dest, int low, int high, int off, компаратор C)
Вы можете найти код следующим образом:
Код Java
if (длина <insertionort_threshold) {for (int i = low; i <high; i ++) для (int j = i; j> low && c.compare (dest [j-1], dest [j])> 0; j--) swap (dest, j, j-j-1); возвращаться; }Вызов метода сравнения компаратора
4. Сравнение двух вышеупомянутых сортировочных выступлений
BinarySort должен выполнять сравнения NLG (N) , а в худшем - движения n^2
Mergesort постоянно выполняет бинарные подразделения, и после того, как бинарные подразделения разделены на мелкие части, оно вставлено и отсортировано. Таким образом, времена NLG (N) будут сравниваться , а времена NLG (N) будут перемещены . Но сначала необходимо скопировать копию исходных данных, так что она займет вдвое больше места
Таким образом, вы можете выбрать в соответствии со своими потребностями
В приведенной выше статье кратко обсуждается упорядочение массивов или списков объектов, а принципы сортировки коллекций - это все контент, которым я делюсь с вами. Я надеюсь, что вы можете дать вам ссылку, и я надеюсь, что вы сможете поддержать Wulin.com больше.