Сортировка по убыванию
Мы используем метод Collections.reverseOrder() вместе с Collections.sort() для сортировки списка в порядке убывания. В приведенном ниже примере мы использовали инструкцию для сортировки в обратном порядке: Collections.sort (arraylist, Collections.reverseOrder ()).
Однако это также можно выполнить следующим образом. Тогда список будет сначала отсортирован в порядке возрастания, а затем будет перевернут:
- Collections.sort (список);
- Collections.reverse (список).
Полный пример:
import java.util.*; public class Details { public static void main(String args[]){ ArrayList<String> arraylist = new ArrayList<String>(); arraylist.add("AA"); arraylist.add("ZZ"); arraylist.add("CC"); arraylist.add("FF"); /*Unsorted List: ArrayList content before sorting*/ System.out.println("Before Sorting:"); for(String str: arraylist){ System.out.println(str); } /* Sorting in decreasing order*/ Collections.sort(arraylist, Collections.reverseOrder()); /* Sorted List in reverse order*/ System.out.println("ArrayList in descending order:"); for(String str: arraylist){ System.out.println(str); } } }
Вывод:
Before Sorting: AA ZZ CC FF ArrayList in descending order: ZZ FF CC AA
В приведенном выше примере мы использовали ArrayList типа String (ArrayList ). Этот же метод можно применять и для списка целых чисел.
Оцени статью
Оценить
Средняя оценка / 5. Количество голосов:
Видим, что вы не нашли ответ на свой вопрос.
Помогите улучшить статью.
Спасибо за ваши отзыв!
Конструкторы
Инициализирует новый экземпляр класса ArrayList, который является пустым и имеет начальную емкость по умолчанию.Initializes a new instance of the ArrayList class that is empty and has the default initial capacity. |
|
Инициализирует новый экземпляр класса ArrayList, который содержит элементы, скопированные из указанной коллекции, и обладает начальной емкостью, равной количеству скопированных элементов.Initializes a new instance of the ArrayList class that contains elements copied from the specified collection and that has the same initial capacity as the number of elements copied. |
|
Инициализирует новый пустой экземпляр класса ArrayList с указанной начальной емкостью.Initializes a new instance of the ArrayList class that is empty and has the specified initial capacity. |
Добавления элементов в класс ArrayList
Для удобства в следующем списке приведены все методы, позволяющие добавлять элементы в объект класса :
- — добавляет к вызывающей коллекции. Возвращает true, если был добавлен к коллекции. (Интерфейс )
- — вставляет в вызывающий список в позицию, указанную в . Любые ранее вставленные элементы за указанной позицией вставки смещаются вверх. То есть никакие элементы не перезаписываются. (Интерфейс )
- — присваивает элементу, находящемуся в списке в позиции . (Интерфейс )
- — добавляет все элементы к вызывающей коллекции. Возвращает , если операция удалась (то есть все элементы добавлены). В противном случае возвращает . (Интерфейс )
В следующем примере рассмотрим создание объекта класса и добавление в него элементов с помощью указанных выше методов:
Пример 1: сортировка ArrayList
Здесь мы сортируем ArrayList типа String. Делать это можно, просто используя метод Collections.sort (arraylist). Список вывода будет отсортирован по алфавиту.
import java.util.*; public class Details { public static void main(String args[]){ ArrayList listofcountries = new ArrayList(); listofcountries.add("India"); listofcountries.add("US"); listofcountries.add("China"); listofcountries.add("Denmark"); /*Unsorted List*/ System.out.println("До:"); for(String counter: listofcountries){ System.out.println(counter); } /* Sort statement*/ Collections.sort(listofcountries); /* Sorted List*/ System.out.println("После:"); for(String counter: listofcountries){ System.out.println(counter); } } }
Выход:
До: India US China Denmark После: China Denmark India US
Примеры Java ArrayList
Создание ArrayList и добавление элементов и коллекции
Сначала мы создаем ArrayList в Java типа строка а затем добавьте элементы в список. Затем мы добавляем новый элемент в индекс 1. Таким образом, элемент, который ранее присутствовал в индексе 1, будет последовательно перемещаться вправо. Индекс в массиве всегда начинается с 0.
Затем мы создаем новый список из 2 элементов и добавляем всю коллекцию в список 1 с индексом 1.
import java.util.ArrayList; public class ArrayListDemo { public static void main(String[] args) { //Create a String ArrayList ArrayList<String> al = new ArrayList<String>(); //Add elements al.add("Java"); al.add("JavaScript"); al.add("PHP"); System.out.println("Element in the list1:"); System.out.println(al); //Add element at index 1 al.add(1, "C"); System.out.println("After adding element at index 1: "); System.out.println(al); //Create list2 ArrayList<String> list = new ArrayList<String>(); list.add("C++"); list.add("Ruby"); System.out.println("Elements in list2:"); System.out.println(list); //Add list2 elements in list1 al.addAll(1, list); System.out.println("Elements in List 1 after adding list2:"); System.out.println(al); } }
Output: Element in the list1: After adding element at index 1: Elements in list2: Elements in List 1 after adding list2:
Изменение и удаление элемента из ArrayList
Ниже приведен пример программы для изменения массив list и удалите элемент из ArrayList в Java.
import java.util.ArrayList; public class ArrayListDemo2 { public static void main(String[] args) { //Create an Integer ArrayList ArrayList<Integer> numbers = new ArrayList<Integer>(); numbers.add(4); numbers.add(8); numbers.add(2); System.out.println("Elements in the list are: "); System.out.println(numbers); //Modify element numbers.set(1, 6); System.out.println("After modifying an element at index 1:"); System.out.println(numbers); //Remove an element numbers.remove(2); System.out.println("After removing an element at index 2:"); System.out.println(numbers); } }
Output: Elements in the list are: After modifying an element at index 1: After removing an element at index 2:
Другие полезные методы
В приведенном ниже примере показано использование методов contains (), indexOf () и keepAll (), которые являются частью ArrayList.
import java.util.ArrayList; public class ArrayListDemo4 { public static void main(String[] args) { ArrayList<String> letters = new ArrayList<String>(); letters.add("A"); letters.add("G"); letters.add("R"); System.out.println(letters.contains("U")); int i = letters.indexOf("G"); System.out.println("Index of G is " + i); ArrayList<String> c = new ArrayList<String>(); c.add("F"); c.add("E"); c.add("T"); c.add("P"); letters.addAll(c); System.out.println("Elements in the list after using addAll:"); System.out.println(letters); letters.retainAll(c); System.out.println("Elements in the list after using retainAll:"); System.out.println(letters); } }
Output: false Index of G is 1 Elements in the list after using addAll: Elements in the list after using retainAll:
Очистить список ArrayList в java
В приведенном ниже примере четко показан результат использования методов isEmpty () и clear () в ArrayList. Используя метод clear (), мы можем очистить список ArrayList, удалив все элементы.
import java.util.ArrayList; public class ArrayListDemo5 { public static void main(String[] args) { ArrayList<String> s = new ArrayList<String>(); s.add("India"); s.add("US"); s.add("Germany"); System.out.println("Contents in list:"); System.out.println(s); System.out.println("Result of calling isEmpty(): " + s.isEmpty()); s.clear(); System.out.println("Contents in list after calling clear(): " + s); System.out.println("Result of calling isEmpty() after clear: " + s.isEmpty()); } }
Contents in list: Result of calling isEmpty(): false Contents in list after calling clear(): [] Result of calling isEmpty() after clear: true
sureCapacity ()
Этот метод гарантирует, что Java ArrayList может содержать минимальное количество элементов. Это можно использовать для динамически растущего размера массива.
import java.util.ArrayList; public class ArrayListDemo6 { public static void main(String[] args) { ArrayList al = new ArrayList(); al.add("Mango"); al.add("Guava"); al.add("Apple"); al.ensureCapacity(3); System.out.println("Array list can store
of 3 elements"); al.add("Orange"); System.out.println(al); } }
Output: Array list can store minimum of 3 elements
Что такое ArrayList
ArrayList — это класс коллекции переменной длины. Используя этот класс, программист может создать структуру данных ArrayList. Класс ArrayList дополнительно реализует интерфейс List. Массив имеет фиксированную длину, поэтому невозможно хранить больше элементов, чем определенный размер массива. Однако список массивов является динамическим. Другими словами, программист может добавлять или удалять элементы по мере необходимости. При использовании ArrayList программист может использовать предопределенные методы, такие как добавление, удаление и т. Д. Кроме того, он может содержать повторяющиеся элементы, а также поддерживает порядок вставки данных. Пример программы следующий.
Рисунок 2: Java-программа с ArrayList
«Числа» — это объект типа ArrayList. Метод add позволяет вставлять новые элементы в ArrayList. Наконец, цикл for выполняет итерацию по списку массивов и выводит их на экран. Наблюдая за выводом, мы видим, что ArrayList поддерживает порядок вставки данных, а также содержит дубликаты элементов.
Методы
Помимо методов, унаследованных от родительских классов, ArrayList определяет следующие методы:
№ | Метод и описание |
1 | void add(int index, Object element)Вставляет указанный элемент в указанный индекс позиции в этом списке. Выбрасывает IndexOutOfBoundsException, если указанный индекс выходит за допустимые пределы (index size()). |
2 | boolean add(Object o)Добавляет указанный элемент в конец этого списка. |
3 | boolean addAll(Collection c)Добавляет все элементы в указанной коллекции в конец этого списка в том порядке, в котором они возвращаются итератором указанной коллекции. Вызывает NullPointerException, если указанная коллекция имеет значение null (нулевая). |
4 | boolean addAll(int index, Collection c)Вставляет все элементы указанной коллекции в этот список, начиная с указанной позиции. Вызывает NullPointerException, если указанная коллекция имеет значение null. |
5 | void clear()Удаляет все элементы из этого списка. |
6 | Object clone()Возвращает неглубокую копию этого массива. |
7 | boolean contains(Object o)Возвращает true, если этот список содержит указанный элемент. Если точнее, то возвращает true тогда и только тогда, когда этот список содержит хотя бы один элемент e такой, что (o==null ? e==null : o.equals(e)). |
8 | void ensureCapacity(int minCapacity)Увеличивает емкость этого экземпляра ArrayList, если это необходимо, чтобы гарантировать, что он может удерживать, по крайней мере, количество элементов, заданных аргументом минимальной емкости. |
9 | Object get(int index)Возвращает элемент в указанной позиции в этом списке. Вызывает IndexOutOfBoundsException, если указанный индекс выходит за допустимые пределы (index = size()). |
10 | int indexOf(Object o)Возвращает индекс в этом списке первого упоминания указанного элемента или -1, если List не содержит этот элемент. |
11 | int lastIndexOf(Object o)Возвращает индекс в этом списке последнего упоминания указанного элемента или -1, если List не содержит этот элемент. |
12 | Object remove(int index)Удаляет элемент в указанной позиции в этом списке. Вызывает IndexOutOfBoundsException, если индекс выходит за допустимые пределы (index = size()). |
13 | protected void removeRange(int fromIndex, int toIndex)Удаляет из этого списка все элементы, индекс которых находится между fromIndex, включительно, и toIndex, исключительно. |
14 | Object set(int index, Object element)Заменяет элемент в указанной позиции в этом списке указанным элементом. Вызывает IndexOutOfBoundsException, если указанный индекс выходит за допустимые пределы (index = size()). |
15 | int size()Возвращает количество элементов в этом списке. |
16 | Object[] toArray()Возвращает массив, содержащий все элементы в этом списке в правильном порядке. Вызывает NullPointerException, если указанный массив равен null (нулевой). |
17 | Object[] toArray(Object[] a)Возвращает массив, содержащий все элементы в этом списке в правильном порядке; тип выполнения возвращаемого массива — тип указанного массива. |
18 | void trimToSize()Обрезает емкость этого экземпляра ArrayList до его текущих размеров. |
Java ArrayList adding single items
Single elements can be added to an with the
method.
com/zetcode/ListAddItem.java
package com.zetcode; import java.util.ArrayList; import java.util.List; public class ListAddItem { public static void main(String[] args) { List<String> langs = new ArrayList<>(); langs.add("Java"); langs.add("Python"); langs.add(1, "C#"); langs.add(0, "Ruby"); for (String lang : langs) { System.out.printf("%s ", lang); } System.out.println(); } }
The example adds elements to an array list one by one.
List<String> langs = new ArrayList<>();
An is created. The data type specified inside
the diamond brackets (< >) restricts the elements to this data
type; in our case, we have a list of strings.
langs.add("Java");
An element is appended at the end of the list with the
method.
langs.add(1, "C#");
This time the overloaded method inserts the element at the
specified position; The «C#» string will be located at the second position of
the list; remember, the is an ordered sequence of
elements.
for (String lang : langs) { System.out.printf("%s ", lang); }
With the loop, we go through the
list and print its elements.
Ruby Java C# Python
Note that the elements keep the order they were inserted.
Создайте список ArrayList
ArrayList имеет несколько конструкторов, и мы представим их все в этом разделе.
Во-первых, обратите внимание, что ArrayList является универсальным классом, поэтому вы можете параметризовать его любым типом, который вы хотите, и компилятор гарантирует, что, например, вы не сможете поместить Целочисленные значения в коллекцию Строк. Кроме того, вам не нужно приводить элементы при извлечении их из коллекции
Во-вторых, рекомендуется использовать универсальный интерфейс List в качестве типа переменной, поскольку он отделяет его от конкретной реализации.
List list = new ArrayList<>(); assertTrue(list.isEmpty());
Мы просто создаем пустую ArrayList экземпляр.
2.2. Конструктор, Принимающий Начальную Мощность
List list = new ArrayList<>(20);
Здесь указывается начальная длина базового массива. Это может помочь вам избежать ненужного изменения размера при добавлении новых элементов.
2.3. Конструктор, принимающий Коллекцию
Collection number = IntStream.range(0, 10).boxed().collect(toSet()); List list = new ArrayList<>(numbers); assertEquals(10, list.size()); assertTrue(numbers.containsAll(list));
Обратите внимание, что элемент экземпляра Collection используется для заполнения базового массива
Выполните итерацию по списку ArrayList
Существует два типа итераторов: Iterator и ListIterator .
В то время как первый дает вам возможность перемещаться по списку в одном направлении, второй позволяет вам перемещаться по нему в обоих направлениях.
Здесь мы покажем вам только ListIterator :
List list = new ArrayList<>( IntStream.range(0, 10).boxed().collect(toCollection(ArrayList::new)) ); ListIterator it = list.listIterator(list.size()); List result = new ArrayList<>(list.size()); while (it.hasPrevious()) { result.add(it.previous()); } Collections.reverse(list); assertThat(result, equalTo(list));
Вы также можете искать, добавлять или удалять элементы с помощью итераторов.
Производительность и лучшие практики
Пустая коллекция вместо Null
Если ваша программа может вернуть коллекцию, которая не содержит никаких значений, убедитесь, что возвращается пустая коллекция, а не Null. Это сэкономит вам время на различные проверки и избавит от многих ошибок.
Создание объектов только когда необходимо
Создание объектов — одна из самых затратных операций в Java. Лучше всего создавать их только тогда, когда они действительно нужны.
Deadlocks (Дедлоки)
Взаимная блокировка (Deadlock) потоков может происходить по многим причинам, и полностью защититься от них в Java 8 очень сложно. Чаще всего, это происходит, когда один синхронизируемый объект ожидает ресурсов, которые заблокированы другим синхронизированным объектом.
Вот пример тупика этого потока:
Результат этой программы:
Взаимоблокировок можно избежать, изменив порядок вызова потоков:
Вывод:
Структуры данных
Комбинирование хеш-таблиц
Комбинирование двух хеш-таблиц вручную через цикл очень неэффективно. Вот альтернативное решение этой проблемы, которое вам возможно понравится:
Array или ArrayList?
Выбор между и зависит от специфики задачи Java, которую вы хотите решить. Запомните следующие особенности этих типов:
- Массив имеет фиксированный размер, и память для него выделяется во время объявления, а размер может динамически меняться.
- Массивы Java работают намного быстрее, а в намного проще добавлять и удалять элементы.
- При работе с скорее всего возникнет ошибка .
- может быть только одномерным, когда массивы Java могут быть многомерными.
Synchronizing Access to an ArrayList
The ArrayList class is not synchronized. If multiple threads try to modify an ArrayList at the same time then the final result becomes not-deterministic because one thread might override the changes done by another thread.
Example Demonstrating ArrayList’s unpredictable behavior in multi-threaded environments
The following example shows what happens when multiple threads try to modify an ArrayList at the same time.
The final output of the above program should be equal to because we’re incrementing the values in the ArrayList 100 times. But if you run the program, it will produce different output every time it is run —
Try running the above program multiple times and see how it produces different outputs. To learn more about such issues in multi-threaded programs, check out my article on Java Concurrency Issues and Thread Synchronization.
Example demonstrating how to synchronize concurrent modifications to an ArrayList
All right! Now let’s see how we can synchronize access to the in multi-threaded environments.
The following example shows the synchronized version of the previous example. Unlike the previous program, the output of this program is deterministic and will always be the same.
The above example uses method to get a synchronized view of the ArrayList.
Moreover, the modifications to the ArrayList inside the method is wrapped inside a block. This ensures that no two threads can increment ArrayList elements at the same time.
You can also use a if you need thread safety. It is a thread-safe version of the ArrayList class. It implements all the mutating operations by making a fresh copy of the ArrayList.
Что такое массив
Массив — это структура данных с фиксированной длиной. Это помогает хранить элементы данных, принадлежащие к одному типу данных. Иногда требуется иметь много элементов одного типа данных. Например, предположим, что программа для хранения оценок студентов. Невозможно создать переменные для каждого. Массив является альтернативой этой проблеме. Используя массив, программист может хранить несколько элементов данных одного типа как одну единицу.
int отмечается ; объявляет массив с именем marks, который может хранить 5 целочисленных значений. Размер массива равен 5. Другими словами, размер массива фиксирован. Таким образом, программист может хранить только 5 или менее элементов в этом массиве. Индекс 1улица Элемент равен 0. В этом массиве индекс последнего элемента равен 4. Пример программы массива выглядит следующим образом.
Рисунок 1: Java-программа с массивом
В приведенной выше программе «marks» — это массив. Он состоит из 5 целых чисел. Цикл for перебирает метки и отображает эти метки на консоли. Сумма представляет собой переменную целочисленного типа, которая инициализируется нулем. Следующий цикл for выполняет итерации элементов массива. На каждой итерации знак добавляется к сумме. В конце цикла for сумма содержит общее значение всех пяти меток. Наконец, System.out.println отображает итоговые оценки.
Java ArrayList sorting
There are different wasy to sort an .
Sorting ArrayList with its sort method
The method sorts a list
according to the order induced by the specified comparator.
com/zetcode/ArrayListSortingEx.java
package com.zetcode; import java.util.ArrayList; import java.util.Comparator; import java.util.List; class Person { private int age; private String name; public Person(int age, String name) { this.age = age; this.name = name; } public int getAge() { return age; } @Override public String toString() { return "Age: " + age + " Name: " + name; } } public class ArrayListSortingEx { public static void main(String[] args) { List<Person> persons = createList(); persons.sort(Comparator.comparing(Person::getAge).reversed()); System.out.println(persons); } private static List<Person> createList() { List<Person> persons = new ArrayList<>(); persons.add(new Person(17, "Jane")); persons.add(new Person(32, "Peter")); persons.add(new Person(47, "Patrick")); persons.add(new Person(22, "Mary")); persons.add(new Person(39, "Robert")); persons.add(new Person(54, "Greg")); return persons; } }
We have an of custom classes.
We sort the persons according to their age in a reversed order.
persons.sort(Comparator.comparing(Person::getAge).reversed());
This line sorts the persons by their age, from the oldest to the youngest.
Sorting ArrayList with Java 8 stream
In the second example, we use Java stream to sort the .
Streams API is a more powerful way to do sorting.
com/zetcode/ArrayListSortingEx2.java
package com.zetcode; import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; class Country { private String name; private int population; public Country(String name, int population) { this.name = name; this.population = population; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getPopulation() { return population; } public void setPopulation(int population) { this.population = population; } @Override public String toString() { return "Country{" + "name=" + name + ", population=" + population + '}'; } } public class ArrayListSortingEx2 { public static void main(String[] args) { List<Country> countries = createList(); List<Country> sorted_countries = countries.stream() .sorted((e1, e2) -> Integer.compare(e1.getPopulation(), e2.getPopulation())).collect(Collectors.toList()); System.out.println(sorted_countries); } private static List<Country> createList() { List<Country> countries = new ArrayList<>(); countries.add(new Country("Slovakia", 5424000)); countries.add(new Country("Hungary", 9845000)); countries.add(new Country("Poland", 38485000)); countries.add(new Country("Germany", 81084000)); countries.add(new Country("Latvia", 1978000)); return countries; } }
In this example, we have a list of countries. Each country has a name and
population. The countries are sorted by population.
List<Country> sorted_countries = countries.stream() .sorted((e1, e2) -> Integer.compare(e1.getPopulation(), e2.getPopulation())).collect(Collectors.toList());
With the method, we create a stream from a list. The
method sorts elements according to the provided
comparator. With we compare the populations of
countries. With , we transform the stream into a list of
countries.
The countries are sorted by their population in ascending mode.