Список Java – это упорядоченная коллекция. Список Java – это интерфейс, который расширяет интерфейс Collection. Список Java предоставляет контроль над позицией, в которую можно вставить элемент. Вы можете получить доступ к элементам по их индексу, а также искать элементы в списке.
Список Java
Некоторые важные моменты о списке Java;
- Интерфейс списка Java является членом Фреймворка Коллекций Java.
- Список позволяет добавлять дублирующие элементы.
- Список позволяет иметь элементы ‘null’.
- Интерфейс списка получил много методов по умолчанию в Java 8, например replaceAll, sort и spliterator.
- Индексы списка начинаются с 0, как и у массивов.
- Список поддерживает обобщения, и мы должны использовать их всегда, когда это возможно. Использование обобщений с Списком предотвратит ClassCastException во время выполнения.
Диаграмма класса списка Java
Интерфейс List в Java расширяет интерфейс Collection. Интерфейс Collection расширяет интерфейс Iterable. Некоторые из наиболее используемых классов реализации List включают ArrayList, LinkedList, Vector, Stack, CopyOnWriteArrayList. AbstractList предоставляет каркасную реализацию интерфейса List для уменьшения усилий при реализации List.
Методы List в Java
Некоторые из полезных методов List в Java включают;
- int size(): чтобы получить количество элементов в списке.
- boolean isEmpty(): чтобы проверить, пуст ли список или нет.
- boolean contains(Object o): Возвращает true, если этот список содержит указанный элемент.
- Iterator<E> iterator(): Возвращает итератор по элементам этого списка в правильной последовательности.
- Object[] toArray(): Возвращает массив, содержащий все элементы этого списка в правильной последовательности.
- boolean add(E e): Добавляет указанный элемент в конец этого списка.
- boolean remove(Object o): Удаляет первое вхождение указанного элемента из этого списка.
- boolean retainAll(Collection<?> c): Сохраняет только элементы в этом списке, которые содержатся в указанной коллекции.
- void clear(): Удаляет все элементы из списка.
- E get(int index): Returns the element at the specified position in the list.
- E set(int index, E element): Replaces the element at the specified position in the list with the specified element.
- ListIterator<E> listIterator(): Возвращает итератор списка по элементам в списке.
- List<E> subList(int fromIndex, int toIndex): Возвращает вид на часть этого списка между указанным fromIndex (включительно) и toIndex (исключительно). Возвращенный список поддерживается этим списком, поэтому неструктурные изменения в возвращенном списке отражаются в этом списке и наоборот.
Некоторые из методов по умолчанию, добавленных в List в Java 8, включают;
- default void replaceAll(UnaryOperator<E> operator): Заменяет каждый элемент этого списка результатом применения оператора к этому элементу.
- default void sort(Comparator<super E> c): Сортирует этот список в соответствии с порядком, вызванным указанным компаратором.
- default Spliterator<E> spliterator(): Создает Spliterator по элементам в этом списке.
Массив Java в список
Мы можем использовать класс Arrays, чтобы получить представление массива в виде списка. Однако мы не сможем вносить структурные изменения в список, это вызовет исключение java.lang.UnsupportedOperationException. Поэтому лучший способ – использовать цикл for для создания списка, перебирая массив. Ниже приведен простой пример, показывающий, как правильно преобразовать массив Java в список.
package com.journaldev.examples;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class ArrayToList {
public static void main(String[] args) {
String[] vowels = {"a","e","i","o","u"};
List vowelsList = Arrays.asList(vowels);
System.out.println(vowelsList);
/**
* List is backed by array, we can't do structural modification
* Both of the below statements will throw java.lang.UnsupportedOperationException
*/
//vowelsList.remove("e");
//vowelsList.clear();
//использование цикла for для копирования элементов из массива в список, безопасно для изменения списка
List myList = new ArrayList<>();
for(String s : vowels){
myList.add(s);
}
System.out.println(myList);
myList.clear();
}
}
Выберите любой из приведенных выше методов в зависимости от требований вашего проекта.
Java List to Array
A simple example showing the correct way to convert a list to array.
package com.journaldev.examples;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class ListToArray {
public static void main(String[] args) {
List letters = new ArrayList();
// пример добавления
letters.add("A");
letters.add("B");
letters.add("C");
//преобразование списка в массив
String[] strArray = new String[letters.size()];
strArray = letters.toArray(strArray);
System.out.println(Arrays.toString(strArray)); //will print "[A, B, C]"
}
}
Java List sort
Существует два способа сортировки списка. Мы можем использовать класс Collections для естественной сортировки или мы можем использовать метод List sort() и наш собственный компаратор для сортировки. Ниже приведен простой пример сортировки списка Java.
package com.journaldev.examples;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Random;
public class ListSortExample {
public static void main(String[] args) {
List ints = new ArrayList<>();
Random random = new Random();
for (int i = 0; i < 10; i++) ints.add(random.nextInt(1000));
//естественная сортировка с использованием класса Collections
Collections.sort(ints);
System.out.println("Natural Sorting: "+ints);
//Моя пользовательская сортировка, обратный порядок
ints.sort((o1,o2) -> {return (o2-o1);});
System.out.println("Reverse Sorting: "+ints);
}
}
A sample output is given below. Since I am using Random for generating list elements, it will be different every time.
Natural Sorting: [119, 273, 388, 450, 519, 672, 687, 801, 812, 939]
Reverse Sorting: [939, 812, 801, 687, 672, 519, 450, 388, 273, 119]
Java List Common Operations
Самые распространенные операции, выполняемые с Java-списком, – это добавление, удаление, установка, очистка, получение размера и т. д. Ниже приведен простой пример списка на Java, демонстрирующий использование общих методов.
package com.journaldev.examples;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class ListExample {
public static void main(String args[]) {
List vowels= new ArrayList();
//пример добавления
vowels.add("A");
vowels.add("I");
//давайте вставим E между A и I
vowels.add(1,"E");
System.out.println(vowels);
List list = new ArrayList();
list.add("O");list.add("U");
//добавление элементов списка к буквам
vowels.addAll(list);
System.out.println(vowels);
//пример очистки для опустошения списка
list.clear();
//пример получения размера
System.out.println("letters list size = "+vowels.size());
//пример установки
vowels.set(2, "E");
System.out.println(vowels);
//пример подсписка
vowels.clear();vowels.add("E"); vowels.add("E");vowels.add("I"); vowels.add("O");
list = vowels.subList(0, 2);
System.out.println("letters = "+vowels+", list = "+list);
vowels.set(0, "A");
System.out.println("letters = "+vowels+", list = "+list);
list.add("U");
System.out.println("letters = "+vowels+", list = "+list);
}
}
Результатом приведенного выше примера списка на Java является;
[A, E, I]
[A, E, I, O, U]
letters list size = 5
[A, E, E, O, U]
letters = [E, E, I, O], list = [E, E]
letters = [A, E, I, O], list = [A, E]
letters = [A, E, U, I, O], list = [A, E, U]
Итератор списка Java
Ниже приведен простой пример того, как выполняется итерация по списку в Java.
package com.journaldev.examples;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class ListIteratorExample {
public static void main(String[] args) {
List list = new ArrayList<>();
for(int i=0; i<5; i++) list.add(i);
Iterator iterator = list.iterator();
//простая итерация
while(iterator.hasNext()){
int i = (int) iterator.next();
System.out.print(i + ", ");
}
System.out.println("\n"+list);
//изменение списка с использованием итератора
iterator = list.iterator();
while(iterator.hasNext()){
int x = (int) iterator.next();
if(x%2 ==0) iterator.remove();
}
System.out.println(list);
//изменение структуры списка во время итерации
iterator = list.iterator();
while(iterator.hasNext()){
int x = (int) iterator.next(); //ConcurrentModificationException here
if(x==1) list.add(10);
}
}
}
Результатом приведенной выше программы итератора списка Java является;
0, 1, 2, 3, 4,
[0, 1, 2, 3, 4]
[1, 3]
Exception in thread "main" java.util.ConcurrentModificationException
at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:901)
at java.util.ArrayList$Itr.next(ArrayList.java:851)
at com.journaldev.examples.ListIteratorExample.main(ListIteratorExample.java:34)
Это все, что касается быстрого обзора списка в Java. Я надеюсь, что эти примеры списков на Java помогут вам начать программирование с коллекциями списков.
Source:
https://www.digitalocean.com/community/tutorials/java-list