Перевірка, чи список сортується на Java

1. Огляд

У цьому підручнику ми побачимо різні способи перевірити, чи сортується список на Java .

2. Ітераційний підхід

Ітераційний підхід - це простий та інтуїтивно зрозумілий спосіб перевірити відсортований список. У цьому підході ми повторимо список і порівняємо сусідні елементи. Якщо будь-який із двох суміжних елементів не відсортований, можна сказати, що список не відсортований.

Список можна відсортувати за природним порядком або за власним замовленням. Ми розглянемо обидва ці випадки за допомогою інтерфейсів Comparable та Comparator .

2.1. Використання порівнянних

Спочатку розглянемо приклад списку, елементи якого мають тип Порівняний . Тут ми розглянемо список, що містить об’єкти типу String :

public static boolean isSorted(List listOfStrings) { if (isEmpty(listOfStrings) || listOfStrings.size() == 1) { return true; } Iterator iter = listOfStrings.iterator(); String current, previous = iter.next(); while (iter.hasNext()) { current = iter.next(); if (previous.compareTo(current) > 0) { return false; } previous = current; } return true; }

2.2. Використання компаратора

Тепер давайте розглянемо клас Employee , який не реалізує порівняльне . Отже, у цьому випадку нам потрібно використовувати компаратор для порівняння сусідніх елементів списку:

public static boolean isSorted(List employees, Comparator employeeComparator) { if (isEmpty(employees) || employees.size() == 1) { return true; } Iterator iter = employees.iterator(); Employee current, previous = iter.next(); while (iter.hasNext()) { current = iter.next(); if (employeeComparator.compare(previous, current) > 0) { return false; } previous = current; } return true; }

Наведені два приклади подібні. Різниця лише в тому, як ми порівнюємо попередній та поточний елементи списку.

Крім того, ми також можемо використовувати компаратор, щоб мати точний контроль за перевіркою сортування . Додаткова інформація про ці два доступні в нашому посібнику з порівняння та порівняння в Java.

3. Рекурсивний підхід

Тепер ми побачимо, як перевірити відсортований список за допомогою рекурсії:

public static boolean isSorted(List listOfStrings) { return isSorted(listOfStrings, listOfStrings.size()); } public static boolean isSorted(List listOfStrings, int index) { if (index  0) { return false; } else { return isSorted(listOfStrings, index - 1); } }

4. Використання гуави

Часто корисно використовувати сторонню бібліотеку, а не писати власну логіку. У бібліотеці Гуави є кілька класів утиліти, за допомогою яких ми можемо перевірити, чи сортується список.

4.1. Клас замовлення гуави

У цьому розділі ми побачимо, як використовувати клас замовлення в Гуаві для перевірки відсортованого списку.

Спочатку ми побачимо приклад списку, що містить елементи типу Comparable :

public static boolean isSorted(List listOfStrings) { return Ordering. natural().isOrdered(listOfStrings); }

Далі ми побачимо, як ми можемо перевірити, чи сортується список об’єктів Employee за допомогою компаратора :

public static boolean isSorted(List employees, Comparator employeeComparator) { return Ordering.from(employeeComparator).isOrdered(employees); }

Також ми можемо використовувати natural (). ReverseOrder (), щоб перевірити, чи відсортований список у зворотному порядку. Крім того, ми можемо використовувати natural (). NullFirst () та natural () . nullLast (), щоб перевірити, чи null відображається в першому або останньому з відсортованого списку.

Щоб дізнатися більше про клас замовлення гуави , ми можемо ознайомитись із нашим посібником до статті замовлення гуави

4.2. Клас порівняльників гуави

Якщо ми використовуємо Java 8 або новішу версію, Guava пропонує кращу альтернативу щодо класу Comparators . Ми побачимо приклад використання методу isInOrder цього класу:

public static boolean isSorted(List listOfStrings) { return Comparators.isInOrder(listOfStrings, Comparator. naturalOrder()); }

Як бачимо, у наведеному вище прикладі ми використовували природне впорядкування для перевірки відсортованого списку. Ми також можемо використовувати компаратор для налаштування перевірки сортування.

5. Висновок

У цій статті ми побачили, як ми можемо перевірити відсортований список за допомогою простого ітераційного підходу, рекурсивного підходу та використання Гуави. Ми також коротко зупинились на використанні порівняльника та порівняльного при виборі логіки перевірки сортування.

Реалізацію всіх цих прикладів та фрагментів коду можна знайти на GitHub.