Elettracompany.com

Компьютерный справочник
3 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Java list sort

Collections.sort () в Java с примерами

Метод java.util.Collections.sort () присутствует в классе java.util.Collections. Используется для сортировки элементов, присутствующих в указанном списке коллекции, в порядке возрастания.
Он работает аналогично методу java.util.Arrays.sort (), но это лучше, так как он может сортировать элементы массива, а также связанный список, очередь и многое другое, присутствующее в нем.

Сортировка ArrayList в порядке возрастания

// Java-программа для демонстрации работы Collections.sort ()

public class Collectionsorting

public static void main(String[] args)

// Создаем список строк

ArrayList al = new ArrayList ();

al.add( «Geeks For Geeks» );

/ * Метод Collections.sort сортирует

элементы ArrayList в порядке возрастания. * /

// Давайте распечатать отсортированный список

System.out.println( «List after the use of» +

» Collection.sort() :n» + al);

Сортировка ArrayList в порядке убывания

// Java-программа для демонстрации работы Collections.sort ()
// в порядке убывания.

public class Collectionsorting

public static void main(String[] args)

// Создаем список строк

ArrayList al = new ArrayList ();

al.add( «Geeks For Geeks» );

/ * Метод Collections.sort сортирует

элементы ArrayList в порядке возрастания. * /

// Давайте распечатать отсортированный список

System.out.println( «List after the use of» +

» Collection.sort() :n» + al);

Сортировка ArrayList в соответствии с заданными пользователем критериями.
Мы можем использовать интерфейс Comparator для этой цели.

// Java-программа для демонстрации работы Comparator
// интерфейс и Collections.sort () для сортировки в соответствии
// по заданным пользователем критериям.

// Класс для представления студента.

String name, address;

public Student( int rollno, String name,

this .rollno = rollno;

this .name = name;

this .address = address;

// Используется для печати сведений о студенте в main ()

public String toString()

return this .rollno + » » + this .name +

class Sortbyroll implements Comparator

// Используется для сортировки в порядке возрастания

public int compare(Student a, Student b)

return a.rollno — b.rollno;

public static void main (String[] args)

ArrayList ar = new ArrayList ();

ar.add( new Student( 111 , «bbbb» , «london» ));

ar.add( new Student( 131 , «aaaa» , «nyc» ));

ar.add( new Student( 121 , «cccc» , «jaipur» ));

for ( int i= 0 ; i

Collections.sort(ar, new Sortbyroll());

System.out.println( «nSorted by rollno» );

for ( int i= 0 ; i

Arrays.sort () против Collections.sort ()
Arrays.sort работает для массивов, которые также могут быть примитивного типа данных. Коллекции .sort () работает для объектов Коллекции, такие как ArrayList , LinkedList и т. Д.

Мы можем использовать Collections.sort () для сортировки массива после создания ArrayList заданных элементов массива.

// Использование Collections.sort () для сортировки массива

public class Collectionsort

public static void main(String[] args)

// создаем массив строковых объектов

// Здесь мы создаем список с именем Collist

// здесь используется метод Collection.sort ()

// сортировать элементы списка.

// Давайте распечатать отсортированный список

Java 8 Comparator: How to Sort a List

Want to sort your Lists? Look no further. Check out the variety of ways you can get your Lists just the way you want them.

Join the DZone community and get the full member experience.

In this article, we’re going to see several examples on how to sort a List in Java 8.

Sort a List of Strings Alphabetically

We’ve written London with a lowercase «L» to better highlight differences between Comparator.naturalOrder(), which returns a Comparator that sorts by placing capital letters first, and String.CASE_INSENSITIVE_ORDER, which returns a case-insensitive Comparator.

Basically, in Java 7, we were using Collections.sort() that was accepting a List and, eventually, a Comparator – in Java 8 we have the new List.sort(), which accepts a Comparator.

Sort a List of Integers

Sort a List by String Field

Let’s suppose we have our Movie class and we want to sort our List by title. We can use Comparator.comparing() and pass a function that extracts the field to use for sorting – title, in this example.

The output will be:

As you’ve probably noticed, we haven’t passed a Comparator, but the List is correctly sorted. That’s because title, the extracted field, is a String, and a String implements a Comparable interface. If you peek at the Comparator.comparing() implementation, you will see that it calls compareTo on the extracted key.

Sort a List by Double Field

In a similar way, we can use Comparator.comparingDouble() for comparing double value. In the example, we want to order our List of movies by rating, from the highest to the lowest.

We used the reversed function on the Comparator in order to invert default natural order; that is, from lowest to highest. Comparator.comparingDouble() uses Double.compare() under the hood.

If you need to compare int or long, you can use comparingInt() and comparingLong() respectively.

Sort a List With a Custom Comparator

In the previous examples, we haven’t specified any Comparator since it wasn’t necessary, but let’s see an example in which we define our own Comparator. Our Movie class has a new field – “starred” – set using the third constructor parameter. In the example, we want to sort the list so that we have starred movies at the top of the List.

The result will be:

We can, of course, use a lambda expression instead of Anonymous class, as follows:

We can also use Comparator.comparing() again:

In the last example, Comparator.comparing() takes the function to extract the key to use for sorting as the first parameter, and a Comparator as the second parameter. This Comparator uses the extracted keys for comparison; star1 and star2 are boolean and represent m1.getStarred() and m2.getStarred() respectively.

Sort a List With Chain of Comparators

In the last example, we want to have starred movie at the top and then sort by rating.

And the output is:

As you’ve seen, we first sort by starred and then by rating – both reversed because we want highest value and true first.

Блог только про Java

Учимся программировать на Java с нуля

Главное меню

Сортировка и перетасовка Java

Ветераны программирования иногда вспоминают о том, как им приходилось использовать перфокарты и как вручную программировать алгоритмы сортировки. В наши дни, конечно, алгоритмы сортировки являются частью стандартной библиотеки в большинстве языков программирования, и язык программирования Java — не исключение.

Читать еще:  Почему нет звука на компьютере восстановление звука

Метод sort() класса Collections сортирует коллекцию, реализующую интерфейс List.

Этот метод предполагает, что элементы списка реализуют интерфейс Comparable.

Если вы хотите сортировать каким-то другим способом, вы можете передать объект Comparator в качестве второго параметра конструктора. Вот так можно отсортировать список элементов:

Если вы захотите отсортировать список в порядке убывания, используйте удобный статический метод Collections.reserveSort(). Он вернет компаратор, возвращающий b.compareTo(a). Например, показанный ниже вызов сортирует элементы списка staff в обратном порядке — согласно упорядочиванию, заданному методом compareTo() типа элементов.

Аналогично, следующий вызов обращает порядок, задаваемый itemComparator.

Вас может заинтересовать каким образом метод sort() сортирует список. Обычно, если посмотреть на алгоритм сортировки в книге по алгоритмам, он представляется для массивов с использованием произвольного доступа к элементам. Однако произвольный доступ к элементам списка неэффективен.

Вы можете эффективно сортировать списки, использую форму сортировки слиянием. Однако реализация на языке Java не делает этого. Она просто сбрасывает все элементы в массив, сортирует этот массив, применяя другой вариант сортировки слиянием, и затем копирует отсортированную последовательность обратно в список.

Алгоритм сортировки слиянием, используемый в библиотеке коллекций, немного медленнее быстрой сортировки(quick sort) — традиционного выбора для алгоритмов сортировки общего назначения. Однако он имеет одно важное преимущество: он стабилен, то есть не меняет местами эквивалентные элементы.

Зачем беспокоиться о порядке эквивалентных элементов? Рассмотрим распространенный сценарий. Предположим, что у вас есть список сотрудников, который вы уже отсортировали по именам. Теперь вы сортируете по зарплате. Что случится с сотрудниками с одинаковой зарплатой? При стабильной сортировке порядок по именам сохраняется. Другими словами, в результате получим список, отсортированный сначала по зарплате, потом по имени.

Avi1.ru — спешите, чтобы заказать рекламу YouTube с максимально выгодными предложениями уже сейчас! При этом Вы получаете все, что нужно для грамотного продвижения в сети: подписчиков, лайки и просмотры в пакетных услугах. К тому же сервис предоставляет множество бонусов и скидок для покупателей.

Поскольку коллекциями не обязательно реализовывать все «необязательные» методы, все методы, принимающие параметры-коллекции, должны указывать, когда передавать коллекцию алгоритму безопасно. Например, очевидно, что вы не захотите передать список unmodifiableList алгоритму сортировки. Какого рода списки вы можете передавать? Согласно документации, список должен быть модифицируемым, но не должен быть изменяемым в размере.

Термины определяются следующим образом:

  • Список является модифицируемым, если он поддерживает метод set().
  • Список является изменяемым в размере, если он поддерживает методы add() и remove().

Класс Collections имеет алгоритм shuffle, который выполняет противоположную сортировке задачу: случайным образом изменяет порядок элементов в списке.

Интерфейс Java List Collection с примерами

Интерфейс Java List, java.util.List, представляет упорядоченную последовательность объектов. Элементы, содержащиеся в списке Java, могут быть вставлены, повторены и удалены в соответствии с порядком их появления в нем. Порядок элементов — вот почему эта структура данных называется списком.

Каждый элемент имеет индекс: первый элемент — 0, второй — 1 и т. д. Индекс означает «сколько элементов находится в начале». Таким образом, первый элемент находится на расстоянии 0 элементов от начала списка, потому что он находится в начале.

Вы можете добавить любой объект в список. Если он не типизирован с использованием Java Generics, то вы можете даже смешивать объекты разных типов (классов) в одном и том же списке. Однако на практике это происходит не часто.

Интерфейс List является стандартным интерфейсом и подтипом интерфейса Collection, что означает, что List наследуется от Collection.

List против Set

Интерфейсы List и Set очень похожи в том, что они оба представляют коллекцию элементов. Тем не менее, есть некоторые существенные различия, отраженные в методах, предлагаемых интерфейсами:

  1. Один и тот же элемент может встречаться в списке более одного раза. Это отличается от набора, где каждый элемент может встречаться только один раз.
  2. Элементы в List имеют порядок, и могут повторяться в этом порядке. Набор не дает никаких обещаний относительно порядка элементов, хранящихся внутри.

Реализации

Будучи подтипом Collection, все методы в интерфейсе Collection также доступны в интерфейсе List.

Поскольку List — это интерфейс, вам нужно создать конкретную реализацию интерфейса, чтобы использовать его, либо выбрать между следующими в API коллекций:

  • java.util.ArrayList;
  • java.util.LinkedList;
  • java.util.Vector;
  • java.util.Stack.

Также есть параллельные реализации в пакете java.util.concurrent.

Вот несколько примеров того, как создать экземпляр List:

Как вставить элементы

Вы вставляете элементы (объекты) в список, используя его метод add():

Первые три вызова add() добавляют экземпляр String в конец списка.

Как вставить нулевые значения

Как вставить элементы по определенному индексу

Можно вставить элемент в список по определенному индексу. Интерфейс List имеет версию метода add(), которая принимает индекс в качестве первого параметра, и элемент для вставки в качестве второго:

Если список уже содержит элементы, они теперь будут перемещены дальше во внутренней последовательности списка. Элемент, который имел индекс 0 до того, как новый элемент был вставлен в индекс 0, будет перемещен в индекс 1 и т. д.

Как вставить все элементы из одного списка в другой

Сделать это можно с помощью метода List addAll(). Результирующий список представляет собой объединение двух. Вот пример:

В этом примере все элементы из listSource добавляются в listDest. Метод addAll() принимает коллекцию в качестве параметра, поэтому вы можете передать в качестве параметра список или набор. Другими словами, можете добавить все элементы из списка или набора с помощью addAll().

Как получить элементы

Для этого используется индекс элементов, а также метод get(int index):

Также возможно итерировать элементы списка в том порядке, в котором они хранятся внутри.

Читать еще:  Java базы данных

Как найти элементы

Используется один из этих двух методов:

Метод indexOf() находит индекс первого вхождения в списке заданного элемента:

Запуск этого кода приведет к следующему выводу:

Как найти последнее вхождение элемента в списке

Метод lastIndexOf() находит индекс последнего вхождения в списке данного элемента:

Выходные данные, напечатанные при запуске приведенного выше примера, будут следующими:

Элемент 1 элемент встречается 2 раза в списке. Индекс последнего появления равен 2.

Проверка, содержится ли элемент

Используется метод List contains():

Результатом выполнения этого примера будет:

… потому что список действительно содержит элемент.

Чтобы определить, содержит ли List этот элемент, List будет внутренне выполнять итерации своих элементов и сравнивать каждый с объектом, переданным в качестве параметра. Для сравнения используется метод равенства.

Поскольку можно добавить нулевые значения в список, фактически можно проверить, содержит ли он их:

Очевидно, что если входной параметр для contains() имеет значение null, метод contains() не будет использовать метод equals() для сравнения с каждым элементом, а вместо этого использует оператор ==.

Как удалить элементы

Вы можете удалить элементы с помощью этих двух методов:

  • remove(Object element);
  • remove(int index).

remove(Object element) удаляет этот элемент в списке, если он присутствует. Все последующие элементы затем перемещаются вверх по списку. Таким образом, их индекс уменьшается на 1. Вот пример:

Этот пример сначала добавляет элемент в список, а затем снова удаляет его.

Метод remove(int index) удаляет элемент по указанному индексу. Все последующие элементы в списке затем перемещаются вверх. Таким образом, их индекс уменьшается на 1. Вот пример:

После запуска этого примера кода список будет содержать элементы 1 и 2 элемента Java String с индексами 0 и 1. Первый элемент (элемент 0) был удален из списка.

Как удалить все элементы

Интерфейс List содержит метод clear(), который удаляет все элементы из списка при вызове. Также называется очисткой списка. Вот простой пример:

Сначала создается новый список. Во-вторых, два элемента добавляются в список. В-третьих, вызывается метод clear(). После вызова метода clear() список будет полностью пустым.

Как сохранить все элементы из одного списка в другом

Интерфейс Java List имеет метод retainAll(), который способен сохранять все элементы из одного списка, которые также присутствуют в другом списке. Другими словами, метод retain() удаляет все элементы из целевого списка, которые не найдены в другом списке. Полученный список является пересечением двух списков. Вот Java-пример вызова метода List retainAll():

  • Первые два списка созданы.
  • 3 элемента добавляются в list, а 3 элемента в otherList.
  • Метод retainAll() вызывается, передавая otherList в качестве параметра. После того, как list.retainAll(otherList) завершит выполнение, список будет содержать только те элементы, которые присутствовали как в list, так и otherList до вызова retainAll(). Более конкретно, это element1 и element3.

Размер

Вы можете получить количество элементов, вызвав метод size():

Подсписок

Интерфейс List имеет метод subList(), который может создавать новый List с подмножеством элементов из исходного List.

Метод subList() принимает 2 параметра:

  1. Начальный индекс — это индекс первого элемента из исходного списка для включения в подсписок.
  2. Конечный индекс является последним индексом подсписка, но элемент в последнем индексе не включается в подсписок.

Это похоже на то, как работает метод подстроки Java String. Вот пример:

После выполнения инструкции list.subList(1,3) подсписок будет содержать элементы с индексами 1 и 2. Помните, что исходный список содержит 4 элемента с индексами от 0 до 3. Вызов list.subList(1,3) будет включить индекс 1, но исключить индекс 3, тем самым сохраняя элементы с индексами 1 и 2.

Как преобразовать в набор

Вы можете преобразовать в набор, создав новый набор и добавив в него все элементы из списка. При этом удалятся все дубликаты. Таким образом, результирующий набор будет содержать все элементы списка, но только один раз. Вот пример:

Обратите внимание, что список содержит элемент String 3 два раза. Набор будет содержать эту строку только один раз. Таким образом, результирующий набор будет содержать элемент Strings 1, элемент 2 и элемент 3.

Как преобразовать в массив

Вы можете выполнить это с помощью метода List toArray():

Также возможно преобразовать в массив определенного типа:

Обратите внимание, что даже если мы передадим массив String размером 0 в toArray(), в возвращенном массиве будут все элементы списка. Он будет иметь то же количество элементов, что и список.

Как конвертировать массив в список

Это метод Arrays.asList(), который преобразует массив в список.

Общие

По умолчанию вы можете поместить любой объект в список, но из Java 5 Generics позволяет ограничить типы объектов, которые вы можете вставить. Вот пример:

Этот список теперь может содержать только экземпляры MyObject. Затем вы можете получить доступ к элементам и выполнить итерацию без их приведения:

Как сортировать

Вы можете отсортировать с помощью метода Collections sort().

Сортировка сопоставимых объектов

Если список содержит объекты, которые реализуют интерфейс Comparable(java.lang.Comparable), то эти объекты могут сравнивать себя друг с другом. В этом случае вы можете отсортировать следующим образом:

Класс Java String реализует интерфейс Comparable, вы можете сортировать их в естественном порядке, используя метод Collections sort().

Сортировка с помощью компаратора

Если объекты в списке не реализуют интерфейс Comparable или если вы хотите отсортировать объекты в другом порядке, чем их реализация compare(), вам необходимо использовать реализацию Comparator(java.util.Comparator). Вот пример сортировки списка объектов Car с использованием Comparator.

Первый класс автомобилей:

Вот код, который сортирует список вышеуказанных объектов Car:

Обратите внимание на реализацию Comparator в приведенном выше примере. Сравнивается только поле бренда объектов Car. Можно создать другую реализацию, которая сравнивает номерные знаки или даже количество дверей в автомобилях.

Также обратите внимание, что возможно реализовать Comparator, используя Lambda. Вот пример, который сортирует объекты List of Car с использованием трех различных лямбда-реализаций интерфейса Comparator, каждая из которых сравнивает экземпляры Car по своему полю:

Итерация

Вы можете выполнить итерацию несколькими способами. Три наиболее распространенных:

  • Использование итератора.
  • Использование цикла for-each.
  • Использование цикла for.
  • Использование API Java Stream.
Читать еще:  Восстановление удаленных файлов после форматирования жесткого диска

Я объясню каждый из этих методов итерации списка Java в следующих разделах.

Итерация с использованием итератора

Вы получаете Iterator, вызывая метод iterator() интерфейса List.

Получив Iterator, вы можете продолжать вызывать его метод hasNext(), пока он не вернет false. Вызов hasNext() выполняется внутри цикла while.

Внутри цикла while вы вызываете метод Iterator next() интерфейса Iterator для получения следующего элемента, на который указывает Iterator.

Если список напечатан с использованием Java Generics, вы можете сохранить некоторые объекты внутри цикла while. Вот пример:

Итерация с использованием цикла For-Each

Второй способ — использовать цикл for, добавленный в Java 5 (также называемый циклом «для каждого»):

Цикл for выполняется один раз для каждого элемента списка. Внутри него каждый элемент, в свою очередь, связан с переменной obj.

Если список напечатан (List), вы можете изменить тип переменной внутри цикла:

Обратите внимание, список набирается как String. Поэтому вы можете установить тип переменной внутри цикла для String.

Итерация с помощью цикла For

Цикл for создает переменную int и инициализирует ее равной 0. Затем он зацикливается до тех пор, пока int i меньше размера списка. Для каждой итерации переменная увеличивается.

Внутри цикла for пример обращается к элементам List с помощью метода get(), передавая переменную i в качестве параметра.

Опять же, если список набирается с использованием Java Generics, например, для String, то вы можете использовать универсальный тип List в качестве типа для локальной переменной, которая назначается каждому элементу List в ходе итерации:

Обратите внимание, что тип локальной переменной внутри цикла for теперь String. Поскольку список обычно типизируется как String, он может содержать только объекты String. Следовательно, компилятор знает, что только метод String может быть возвращен из метода get(). Поэтому вам не нужно приводить элемент, возвращенный get(), в String.

С использованием API Java Stream

Для итерации вы должны сначала получить поток из списка. Это выполняется путем вызова метода List stream(). Вот пример получения потока из списка:

Последняя строка этого примера вызывает метод List stream() для получения потока, представляющего элементы списка.

Как только вы получили поток, можете выполнить итерацию потока, вызвав его метод forEach():

Вызов метода forEach() заставит Stream выполнить внутреннюю итерацию всех элементов потока и вызвать получателя, переданного в качестве параметра методу forEach() для каждого элемента в потоке.

Tech Tutorials

Tutorials and posts about Java, Spring, Hadoop and many more. Java code examples and interview questions. Spring code examples.

Monday, September 9, 2019

How to Sort ArrayList in Java

In ArrayList elements are added in sequential order and while displaying the elements by iterating an arraylist that same default ordering will be used. Sometimes you may have a requirement to sort an ArrayList in Java in ascending or descending order. In this post we’ll see how to sort an ArrayList of Strings, Integers or Dates in Java.

Options for sorting a List

You can sort an ArrayList using-

  1. sort() method of the List interface Java 8 onward. Note that sort() method is implemented as a default interface method in List interface.
    • default void sort(Comparator c)— Sorts this list according to the order induced by the specified Comparator. If the specified comparator is null then all elements in this list must implement the Comparable interface and the elements’ natural ordering should be used.
  2. Using Collections.sort() method. There are two overloaded versions of sort method and according to Java docs their description is-
    • public static > void sort(List list)— Sorts the specified list into ascending order, according to the natural ordering of its elements. All elements in the list must implement the Comparable interface. Furthermore, all elements in the list must be mutually comparable (that is, e1.compareTo(e2) must not throw a ClassCastException for any elements e1 and e2 in the list).

  • public static void sort(List list, Comparator c)— Sorts the specified list according to the order induced by the specified comparator. All elements in the list must be mutually comparable using the specified comparator (that is, c.compare(e1, e2)must not throw a ClassCastException for any elements e1 and e2 in the list).
  • Using sorted method of the Java Stream API. There are two overloaded variants of the sorted method.
    • sorted()— Returns a stream consisting of the elements of this stream, sorted according to natural order.
    • sorted(Comparator comparator)— Returns a stream consisting of the elements of this stream, sorted according to the provided Comparator.
  • Sorting ArrayList of strings using sort() method of List

    Using Collections.sort() method to sort ArrayList

    To sort an ArrayList of strings according to the natural ordering of its elements we can use the first of the two sort methods.

    As you can see you just need to pass the ArrayList to sort method. Collections.sort will work in this case because String class implements Comparable interface and provides implementation for the method compareTo(String anotherString).

    Same way Integer class or Date class also implements Comparable interface so list of integers (or dates) can also be sorted in natural order by using sort() method of the Collections class or by using sort() method of the List interface. In fact Java docs give a list of all the classes that implements comparable interface thus can be used with the sort method to sort the elements in the natural order.

    Classes Implementing Comparable

    Following is the list of classes that already implement Comparable interface in Java. Thus the ArrayList storing obejcts of any of these classes can be sorted in its natural ordering by passing the list to sort() method.

    Ссылка на основную публикацию
    ВсеИнструменты 220 Вольт
    Adblock
    detector
    ×
    ×