Elettracompany.com

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

Отсортировать arraylist java

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 ()

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

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

Сортировка ArrayList объектов с использованием пользовательского порядка сортировки

Я хочу реализовать функцию сортировки для моего приложения адресной книги.

Я хочу отсортировать ArrayList contactArray . Contact — это класс, который содержит четыре поля: имя, домашний номер, номер мобильного телефона и адрес. Я хочу отсортировать по name .

Как я могу написать собственную функцию сортировки для этого?

9 ответов

Вот учебник по упорядочению объектов:

Хотя я приведу несколько примеров, я все равно рекомендовал бы прочитать.

Существуют различные способы сортировки ArrayList . Если вы хотите определить естественный (по умолчанию) порядок , вам нужно разрешить Contact внедрить Comparable . Предполагая, что вы хотите выполнить сортировку по умолчанию для name , а затем выполните (пустые проверки для простоты):

так что вы можете просто сделать

Если вы хотите определить внешний управляемый порядок (который переопределяет естественный порядок), вам нужно создать Comparator :

Вы даже можете определить Comparator в Contact , чтобы вы могли использовать их каждый раз вместо того, чтобы создавать их заново:

который можно использовать следующим образом:

И чтобы завершить работу, вы можете использовать универсальный компилятор javabean :

который вы можете использовать следующим образом:

(как вы видите в коде, возможно, пустые поля уже закрыты, чтобы избежать NPE во время сортировки)

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

или поскольку в List теперь есть метод sort

Объяснение:

Начиная с Java 8, функциональные интерфейсы (интерфейсы только с одним абстрактным методом — они могут иметь больше стандартных или статических методов) могут быть легко реализованы с помощью:

Поскольку Comparator имеет только один абстрактный метод int compare(T o1, T o2) это функциональный интерфейс.

Так что вместо (пример из @BalusC ответ )

мы можем уменьшить этот код до:

Мы можем упростить эту (или любую) лямбду, пропустив

  • типы аргументов (Java выведет их на основе сигнатуры метода)
  • или

мы можем написать

Также теперь у Comparator есть статические методы, такие как comparing(FunctionToComparableValue) или comparing(FunctionToValue, ValueComparator) , которые мы могли бы использовать для простого создания компараторов, которые должны сравнивать некоторые конкретные значения из объектов.

Другими словами, мы можем переписать приведенный выше код как

Эта страница рассказывает все, что вам нужно знать о сортировке коллекций, таких как ArrayList.

В основном вам нужно

  • сделайте так, чтобы ваш класс Contact реализовал Comparable интерфейс по
    • создание метода public int compareTo(Contact anotherContact) внутри него.
  • Как только вы это сделаете, вы можете просто позвонить Collections.sort(myContactList); ,
    • где myContactList равно ArrayList ( или любой другой набор Contact ).

Есть и другой способ, включающий создание класса Comparator, о котором вы также можете прочитать на связанной странице.

BalusC и bguiz уже дали очень полные ответы о том, как использовать встроенные компараторы Java.

Читать еще:  Java процедуры и функции

Я просто хочу добавить, что в Google-коллекциях есть .html» rel =» nofollow noreferrer «title =» com.google.common.collect.Ordering javadoc «> Класс упорядочивания , который является более» мощным «, чем стандартные компараторы. Возможно, стоит проверить. Вы можете делать классные вещи, такие как составление Порядков, их изменение, упорядочивание в зависимости от результата функции для ваших объектов .

Здесь — сообщение в блоге, в котором упоминаются некоторые его преимущества.

Вам необходимо, чтобы ваши классы контактов реализовали Comparable , а затем реализуйте метод compareTo(Contact) . Таким образом, Collections.sort сможет отсортировать их для вас. На странице, на которую я ссылался, CompareTo ‘возвращает отрицательное целое число, ноль или положительное целое число, поскольку этот объект меньше, равен или больше указанного объекта.’

Например, если вы хотите отсортировать по имени (от А до Я), ваш класс будет выглядеть следующим образом:

Collections.sort — хорошая реализация сортировки. Если у вас нет аналога, реализованного для Contact, вам нужно будет передать Реализация компаратора

Алгоритм сортировки представляет собой измененную сортировку слиянием (в которой слияние не указывается, если самый высокий элемент в нижнем подсписке меньше самого низкого элемента в верхнем подсписке). Этот алгоритм предлагает гарантированную производительность n log (n). Указанный список должен быть изменяемым, но не должен быть изменяемого размера. Эта реализация выгружает указанный список в массив, сортирует массив и перебирает список, сбрасывая каждый элемент с соответствующей позиции в массиве. Это позволяет избежать производительности n2 log (n), которая может возникнуть в результате попытки отсортировать связанный список на месте.

Сортировка слиянием, вероятно, лучше, чем большинство алгоритмов поиска, которые вы можете сделать.

Я сделал это следующим образом. номер и имя два arraylist. Я должен отсортировать имя. Если произойдет какое-либо изменение порядка именования arralist, то число arraylist также изменит свой порядок.

используйте этот метод:

и используйте: mySortedlist = sortList(myList); Нет необходимости внедрять компаратор в вашем классе. Если вы хотите поменять местами в обратном порядке 1 и -1

Отсортировать arraylist java

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

Если тема для вас новая, и вы еще не знакомы с алгоритмами сортировки, то наверняка при решении задачи «Отсортировать массив по возрастанию» первое что придет в голову, это перебор, то есть: найти минимальный элемент и поменять его местами с начальным, потом, в оставшейся части массива (кроме первого элемента), найти снова минимальный элемент и поменять его со вторым элементом и т.д. Такой алгоритм называется Сортировка выбором. Рассмотрим его подробнее.

Сортировка выбором (Selection sort) в Java.

Реализация алгоритма Сортировка выбором на Java:

Еще одним достаточно простым и известным способом сортировки является Сортировка пузырьком.

Сортировка пузырьком (Bubble sort) в Java.

Алгоритм проходит массив от начала и до конца, сравнивая попарно соседние элементы, Если элементы стоят в неправильном порядке, то они меняются местами, таким образом, после первого прохода на конце массива оказывается максимальный элемент (для сортировки по возрастанию). Затем проход массива повторяется, и на предпоследнем месте оказывается другой наибольший после максимального элемент и т.д. В итоге, наименьший элемент постепенно перемещается к началу массива («всплывает» до нужной позиции как пузырёк в воде).

Реализация алгоритма Сортировка пузырьком на Java (по возрастанию):

Следующие 2 видео наглядно демонстрируют работу алгоритмов сортировки пузырьком и выбором.

Рассмотрим примеры того, как можно воспользоваться выше приведенными алгоритмами.
Для начала создадим массив. Это можно сделать так:

Или мы можем создать массив случайных чисел

Затем воспользуемся вышеприведенными алгоритмами сортировки

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

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

Сортировка массива при помощи метода sort() из класса Arrays.

Метод sort() из класса Arrays использует усовершенствованный алгоритм Быстрой сортировки (Quicksort), который эффективен в большинстве случаев. Для того чтобы отсортировать массив, необходимо написать всего одну строку.

Примечание: в начале файла предварительно нужно подключить библиотеку java.util.

Сортировка массива целых чисел по возрастанию:

Сортировка массива целых чисел по убыванию:

Обратите внимание, что при сортировке массива в обратном порядке (по убыванию) нужно использовать тип Integer[] вместо примитивного типа int[].

Сортировка массива строк в Java:

В этом примере массив имен сортируется в порядке от А до Я. Для того чтобы отсортировать массив в обратном порядке, необходимо в методе sort() указать Collections.reverseOrder().

К сожалению, по умолчанию метод sort() сортирует только примитивные типы данных и строки. Как сортировать массив из собственно созданных объектов, будет рассмотрено в следующих уроках, поскольку это требует более углубленных знаний.

Сортировка ArrayList пользовательских объектов по свойству

Я читал о сортировке ArrayLists с помощью компаратора, но во всех примерах люди использовали compareTo , который, согласно некоторым исследованиям, является методом для строк.

Я хотел отсортировать ArrayList пользовательских объектов по одному из их свойств: объекту даты ( getStartDay() ). Обычно я сравниваю их по item1.getStartDate().before(item2.getStartDate()) , поэтому мне было интересно, могу ли я написать что-то вроде:

25 Ответов

Поскольку Date реализует Comparable , он имеет метод compareTo точно так же, как и String .

Читать еще:  Java распознавание изображений

Так что ваш обычай Comparator может выглядеть следующим образом:

Метод compare() должен возвращать int , поэтому вы не можете напрямую вернуть boolean , как вы планировали в любом случае.

Ваш код сортировки будет примерно таким же, как вы написали:

Немного более короткий способ записать все это, если вам не нужно повторно использовать свой компаратор, — это написать его как встроенный анонимный класс:

С java-8

Теперь вы можете написать последний пример в более короткой форме, используя выражение lambda для Comparator :

И List имеет метод sort(Comparator) , так что вы можете сократить это еще больше:

Это настолько распространенная идиома, что есть встроенный метод для создания Comparator для класса с ключом Comparable :

Все это равнозначные формы.

Классы, имеющие естественный порядок сортировки (например, номер класса), должны реализовывать сопоставимый интерфейс, в то время как классы, не имеющие естественного порядка сортировки (например, стул класса), должны быть снабжены компаратором (или анонимным классом компаратора).

Для сортировки ArrayList можно использовать следующий фрагмент кода:

Да, ты можешь. Существует два варианта сравнения элементов: сопоставимый интерфейс и интерфейс компаратора .

Оба этих интерфейса допускают различное поведение. Comparable позволяет заставить объект действовать так, как вы только что описали строки (фактически, String реализует Comparable). Второй, компаратор, позволяет вам делать то, что вы просите сделать. Вы бы сделали это вот так:

Это приведет к тому, что метод Collections.sort будет использовать ваш компаратор для своего механизма сортировки. Если объекты в реализации ArrayList сопоставимы, вы можете вместо этого сделать что-то вроде этого:

Класс Collections содержит ряд таких полезных и распространенных инструментов.

JAVA 8 lambda выражение

С помощью Java 8 вы можете использовать ссылку на метод для вашего компаратора:

Поскольку технологии появляются каждый день, ответ будет меняться со временем. Я взглянул на LambdaJ и, кажется, очень интересно.

Вы можете попробовать решить эти задачи с помощью LambdaJ . Вы можете найти его здесь: http://code.google.com/p/lambdaj/

Сортировка Итеративная

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

Конечно, наличие такого рода красоты сказывается на производительности (в среднем в 2 раза), но можно ли найти более читабельный код?

Лучший простой способ с JAVA 8 — это для английской алфавитной сортировки

реализация класса

Сортировать

Если вы хотите отсортировать алфавит, содержащий неанглийские символы, вы можете использовать Locale. Ниже кода используйте сортировку символов Turkish.

реализация класса

Сортировать

Функция & ссылка на метод

Метод Collections.sort может сортировать List , используя Comparator , который вы передаете. Этот Comparator может быть реализован с помощью метода Comparator.comparing , где вы можете передать ссылку на метод как необходимый Function . К счастью, сам код намного проще и короче, чем это описание.

Есть и другой способ

Начиная с Java 8 и далее мы не должны использовать Collections.sort() непосредственно. Интерфейс List имеет метод sort() по умолчанию:

Можно использовать компаратор для сортировки зерен на любое свойство в пользовательском классе.

Да, это возможно, например, в этом ответе я сортирую по свойству v класса IndexValue

Если вы заметили, здесь я создаю анонимный внутренний класс (который является Java для closures ) и передаю его непосредственно методу sort класса Arrays

Ваш объект может также реализовать Comparable (это то, что делает String и большинство основных библиотек в Java), но это определит «natural sort order» самого класса и не позволит вам подключать новые.

Вы можете попробовать заказать гуаву :

Java 8 Lambda сокращает сортировку.

Вы можете сортировать с помощью java 8

Я обнаружил, что большинство, если не все из этих ответов полагаются на базовый класс (объект) для реализации сопоставимого или иметь вспомогательный сопоставимый интерфейс.

Только не с моим решением! Следующий код позволяет сравнить поле объекта, зная его строковое имя. Вы можете легко изменить его, чтобы не использовать имя, но затем вам нужно предоставить его или построить один из объектов, с которыми вы хотите сравнить.

Эти фрагменты кода могут быть полезны. Если вы хотите отсортировать объект в моем случае я хочу отсортировать по VolumeName:

Эта работа. Я использую его в своем jsp.

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

Только несколько слайдов используют немецкий язык, 99% из содержания является «English based» Java исходный код; как

где OurCustomComparator использует методы по умолчанию (и другие интересные идеи). Как показано, что приводит к очень сжатому коду для выбора некоторого метода сортировки getter; и супер простой цепочке (или реверсированию) критериев сортировки.

Если вы находитесь в java8, вы найдете там много материала, чтобы начать работу.

ваш класс customComparator должен реализовать java.util.Comparator, чтобы его можно было использовать. он также должен перекрывать compare() AND equals()

compare() должен ответить на вопрос: Является ли объект 1 меньше, равен или больше Объекта 2?

С помощью этой библиотеки вы можете сортировать список пользовательских объектов по нескольким столбцам. Библиотека использует функции версии 8.0. Образец также доступен там. Вот пример, чтобы сделать

Новый, так как 1.8-это метод List.sort() вместо использования Collection.sort() так что вы сразу звоните mylistcontainer.sort()

Вот фрагмент кода, который демонстрирует функцию List.sort():

Я предпочитаю этот процесс:

Если у списка объектов есть свойство с именем startDate , вы можете использовать его снова и снова. Вы даже можете связать их цепью startDate.time .

Это требует , чтобы ваш объект был Comparable , что означает, что вам нужна реализация compareTo , equals и hashCode .

Да, это могло бы быть и быстрее. Но теперь вам не нужно делать новый компаратор для каждого типа сорта. Если вы можете сэкономить время разработки и отказаться от времени выполнения, вы можете пойти с этим.

Читать еще:  Sortedset java пример

Используя Java 8 использование может определить Comparator в одну строку, используя Comparator.comparing()

Используйте любой из следующих способов:

Вариант 1:

Вариант 2:

Ваш пользовательский класс может реализовать интерфейс «Comparable», который требует реализации метода CompareTo. В методе CompareTo затем можно определить, что означает, что объект меньше или больше другого объекта. Так что в вашем примере это может выглядеть примерно так:

Отрицательное число указывает, что это меньше, чем сравниваемый объект. Положительное число указывает, что это больше, чем сравниваемый объект, а ноль означает, что объекты равны.

Затем вы можете использовать collections.sort(myList) для сортировки списка без необходимости подачи в компаратор. Этот метод также имеет преимущество в том, что вещи сортируются автоматически, если вы используете сортированные структуры данных коллекции, такие как TreeSet или TreeMap.

Вы можете проверить эту статью, если вы хотите прочитать больше о сопоставимом интерфейсе (раскрытие: я-автор 😉 ) https://nullbeans.com/the-java-comparable-interface-automatic-sort-of-collections/

Похожие вопросы:

Я использую BlazeDS для соединения Flex с Java. У меня возникли проблемы с передачей ArrayLists пользовательских объектов из Flex в java. У меня есть два объекта, один называется категорией, другой.

Есть коллекция пользовательских элементов структуры : struct MyStruct < int id; std::string currencyCode; int month; int year; int amount; >; Эти данные будут отображаться в некоторой таблице.

У меня есть массив пользовательских объектов, PNMessage objects . Объекты PNMessage имеют свойство, которое является другим объектом с именем PNDate , PNDate имеет свойство под названием date , я.

Я видел здесь много вопросов о сортировке NSArray ‘s, особенно полных пользовательских объектов, но это всегда сводится к определенному свойству или значению, по которому сортируются люди.

У меня возникла проблема с сортировкой arraylist пользовательских объектов по строковому полю. Вот этот код я и пытаюсь сделать: arrRegion.Sort(delegate(Portal.Entidad.Region x.

У меня есть массив пользовательских объектов. Одним из свойств этих объектов является NSString. Я хочу отсортировать по этому свойству. Потому что это NSString, а не NSNumber сортировка немного.

Как я могу отсортировать вектор моего пользовательского объекта и выбрать, по какому свойству его сортировать? Я действительно видел ответ на этот вопрос &, но я не слишком уверен, на чем.

У меня есть массив пользовательских объектов. Объекты включают в себя словарь. Что-то вроде этого: CustomDataModel *dataModel; dataModel.NSString dataModel.NSDictionary dataModel.image Я хотел бы.

В Swift 2.0, как бы вы пошли на сортировку массива пользовательских объектов по свойству? Я знаю, что в Swift 1.2 это было сделано с использованием sorted() и sort(). Однако эти методы больше не.

Возможные Дубликаты : Сортировка списка с помощью Lambda/Linq по объектам C# List<> OrderBy Алфавитный Порядок Как я могу отсортировать список объектов в алфавитном порядке по строковому.

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

У меня есть список двойников в Java, и я хочу отсортировать ArrayList в порядке убывания.

Входной ArrayList, как показано ниже:

Выход должен быть таким

Это будет делать то, что вы хотите. Не забудьте импортировать Collections хотя!

Использовать метод java.util.Collections class, i.e

Фактически, если вы хотите отсортировать пользовательский объект, вы можете использовать

см. коллекции api

Для вашего примера, это сделает волшебство в Java 8

Но если вы хотите отсортировать по некоторым полям сортируемого объекта, вы можете сделать это легко:

Используя lambdas (Java8) и разделив его до самого синтаксиса (в этом случае JVM выберет много), вы получите:

Более подробная версия:

Использование лямбда возможно, потому что интерфейс Comparator имеет только один метод для реализации, поэтому VM может вывести, какой метод реализуется. Поскольку типы параметров могут быть выведены, их не нужно указывать (т.е. (a, b) вместо (Double a, Double b) . И поскольку тело лямбда имеет только одну строку, и ожидается, что метод вернет значение, return выводится, и фигурные скобки не нужны.

В Java8 существует метод сортировки по умолчанию в интерфейсе List, который позволит вам сортировать коллекцию, если вы предоставите Comparator. Вы можете легко отсортировать пример в вопросе следующим образом:

Примечание: аргументы в лямбда меняются местами при передаче в Double.compare, чтобы гарантировать, что сортировка убывает.

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

и, конечно же, предоставит вам собственную реализацию метода compareTo , как здесь:

И затем вы можете снова использовать Colection.sort(list) , так как теперь список содержит объекты типа Comparable и может быть отсортирован. Порядок зависит от метода compareTo . Подробнее см. https://docs.oracle.com/javase/tutorial/collections/interfaces/order.html.

Collections.sort позволяет передать экземпляр Comparator , который определяет логику сортировки. Поэтому вместо сортировки списка в натуральном порядке, а затем его вспять, можно просто передать Collections.reverseOrder() в sort , чтобы отсортировать список в обратном порядке:

Как упоминалось в @Marco13, помимо более идиоматического (и, возможно, более эффективного), использование компаратора обратного порядка гарантирует, что сортировка стабильна (это означает, что порядок элементов не будет изменен, если они равны в соответствии с компаратор, тогда как изменение заднего хода изменит порядок)

если вы используете Java SE 8, тогда это может помочь.

| = > Порядок сортировки Asc:

| = > Сортировка Dsc Order:

| * | Изменить порядок списка:

Вы можете сделать так:

Коллекция имеет компаратор по умолчанию, который может помочь вам в этом.

Кроме того, если вы хотите использовать некоторые новые функции Java 8, вы можете сделать это следующим образом:

Вы можете использовать так

Например, у меня есть класс Person: String name, int age == > Constructor new Person (имя, возраст)

Вот краткая таблица, которая охватывает типичные случаи:

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