Руководство Java List
1. List
List - это interface в Java коллекции интерфейсов и классов (Java Collection Framework). Поскольку это подинтерфейс Collection, он обладает всеми функциями Collection. Кроме того, он обеспечивает основу для поддержания упорядоченной Collection (ordered Collection). Он включает в себя методы, позволяющие вставлять, обновлять, удалять и искать элемент по индексу. List позволяет дублировать элементы и null элементы.
public interface List<E> extends Collection<E>
- Collection
- Queue
- Set
- SortedSet
- NavigableSet
- BlockingQueue
- BlockingDeque
- Deque
- TransferQueue
Иерархия классов реализует (implement) interface List:

- LinkedList
- ArrayList
- CopyOnWriteArrayList
- Vector
- Stack
LinkedList - это специальный класс, который принадлежит как группе List, так и группе Queue:

java.util.List
Listпредоставляет метод listlterator(), который возвращает объект Listlterator, позволяющий выполнять итерацию (iterate) элементов в прямом или обратном направлении. Классы, реализующие interface List - это ArrayList, LinkedList, Stack и Vector. Среди них более широко используются ArrayList и LinkedList.
Методы, определенные в List:
List interface
public interface List<E> extends Collection<E> {
boolean isEmpty();
boolean contains(Object o);
Object[] toArray();
<T> T[] toArray(T[] a);
boolean containsAll(Collection<?> c);
boolean addAll(Collection<? extends E> c);
boolean addAll(int index, Collection<? extends E> c);
boolean removeAll(Collection<?> c);
boolean retainAll(Collection<?> c);
int size();
boolean equals(Object o);
int hashCode();
E get(int index);
E set(int index, E element);
boolean add(E e);
void add(int index, E element);
E remove(int index);
boolean remove(Object o);
void clear();
int indexOf(Object o);
int lastIndexOf(Object o);
Iterator<E> iterator();
ListIterator<E> listIterator();
ListIterator<E> listIterator(int index);
List<E> subList(int fromIndex, int toIndex);
default Spliterator<E> spliterator()
default void replaceAll(UnaryOperator<E> operator)
default void sort(Comparator<? super E> c)
static <E> List<E> of()
static <E> List<E> of(E e1)
static <E> List<E> of(E e1, E e2)
static <E> List<E> of(E e1, E e2, E e3)
static <E> List<E> of(E e1, E e2, E e3, E e4)
static <E> List<E> of(E e1, E e2, E e3, E e4, E e5)
static <E> List<E> of(E e1, E e2, E e3, E e4, E e5, E e6)
static <E> List<E> of(E e1, E e2, E e3, E e4, E e5, E e6, E e7)
static <E> List<E> of(E e1, E e2, E e3, E e4, E e5, E e6, E e7, E e8)
static <E> List<E> of(E e1, E e2, E e3, E e4, E e5, E e6, E e7, E e8, E e9)
static <E> List<E> of(E e1, E e2, E e3, E e4, E e5, E e6, E e7, E e8, E e9, E e10)
static <E> List<E> of(E... elements)
static <E> List<E> copyOf(Collection<? extends E> coll)
}2. Examples
List - это interface, поэтому для создания объекта List вам нужно создать его с помощью класса, который его реализует, например ArrayList, LinkedList,..
ListEx1.java
package org.o7planning.list.ex;
import java.util.ArrayList;
import java.util.List;
public class ListEx1 {
public static void main(String[] args) {
// Create a List
List<String> list = new ArrayList<String>();
list.add("One");
list.add("Three");
list.add("Four");
// Insert an element at index 1
list.add(1, "Two");
for(String s: list) {
System.out.println(s);
}
System.out.println(" ----- ");
// Remove an element at index 2
list.remove(2);
for(String s: list) {
System.out.println(s);
}
}
}Output:
One
Two
Three
Four
-----
One
Two
FourBook.java
package org.o7planning.list.ex;
public class Book {
private String title;
private float price;
public Book(String title, float price) {
this.title = title;
this.price = price;
}
public String getTitle() {
return title;
}
public float getPrice() {
return price;
}
}Например: Объект List содержит типы данных Book.
ListEx2.java
package org.o7planning.list.ex;
import java.util.ArrayList;
import java.util.List;
public class ListEx2 {
public static void main(String[] args) {
Book b1 = new Book("Python Tutorial", 100f);
Book b2 = new Book("HTML Tutorial", 120f);
// Create an Unmodifiable List
List<Book> bookList1 = List.of(b1, b2);
// Create a List of Books using ArrayList
List<Book> bookList = new ArrayList<Book>();
bookList.add(new Book("Java Tutorial", 300f));
bookList.add(new Book("C# Tutorial", 200f));
// Append all elements to the end of list.
bookList.addAll(bookList1);
for(Book book: bookList) {
System.out.println(book.getTitle() + " / " + book.getPrice());
}
}
}Output:
Java Tutorial / 300.0
C# Tutorial / 200.0
Python Tutorial / 100.0
HTML Tutorial / 120.0Array -> List
Статический метод Arrays.asList(..) позволяет преобразовать массив в объект List, однако этот объект имеет фиксированный размер, не можем добавлять или удалять существующие элементы, поскольку он не поддерживает дополнительные методы: add, remove, set и clear.
ListEx3.java
package org.o7planning.list.ex;
import java.util.Arrays;
import java.util.List;
public class ListEx3 {
public static void main(String[] args) {
Book b1 = new Book("Python Tutorial", 100f);
Book b2 = new Book("HTML Tutorial", 120f);
Book b3 = new Book("Java Tutorial", 300f);
Book[] bookArray = new Book[] {b1, b2, b3};
// Create a Fixed-size List.
List<Book> bookList = Arrays.asList(bookArray);
for(Book b: bookList) {
System.out.println("Book: " + b.getTitle());
}
}
}Output:
Book: Python Tutorial
Book: HTML Tutorial
Book: Java Tutorial3. listInterator()
Метод listlterator() возвращает объект Listlterator, который позволяет выполнять итерацию (iterate) элементов в прямом или обратном направлении.
ListIterator<E> listIterator();
ListIterator<E> listIterator(int index);Например:

List_listIterator.java
package org.o7planning.list.ex;
import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;
public class List_listIterator {
public static void main(String[] args) {
// Create a List
List<String> list = new ArrayList<String>();
list.add("One");
list.add("Two");
list.add("Three");
list.add("Four");
// Get a ListIterator.
ListIterator<String> listIterator = list.listIterator();
String first = listIterator.next();
System.out.println("First:" + first);// -->"One"
String second = listIterator.next();
System.out.println("Second:" + second);// -->"Two"
if (listIterator.hasPrevious()) {
System.out.println("Jump back...");
String value = listIterator.previous();
System.out.println("Value:" + value);// -->"Two"
}
System.out.println(" ----- ");
while (listIterator.hasNext()) {
String value = listIterator.next();
System.out.println("Value:" + value);
}
}
}Output:
First:One
Second:Two
Jump back...
Value:Two
-----
Value:Two
Value:Three
Value:Four4. stream()
List - это подинтерфейс Collection, поэтому он наследует метод stream(). Доступ к элементам Collection через Stream делает ваш code кратким и легким для понимания:
- Collection
- Stream
List_stream.java
package org.o7planning.list.ex;
import java.util.ArrayList;
import java.util.List;
public class List_stream {
public static void main(String[] args) {
Book b1 = new Book("Python Tutorial", 100f);
Book b2 = new Book("HTML Tutorial", 120f);
// Create an Unmodifiable List
List<Book> bookList1 = List.of(b1, b2);
// Create a List of Books using ArrayList
List<Book> bookList = new ArrayList<Book>();
bookList.add(new Book("Java Tutorial", 300f));
bookList.add(new Book("C# Tutorial", 200f));
// Append all elements to the end of list.
bookList.addAll(bookList1);
// Using Stream
bookList.stream() //
.filter(b -> b.getPrice() > 100) // Filter Books with price > 100
.forEach(b -> System.out.println(b.getTitle() +" / " + b.getPrice()));
}
}Output:
Java Tutorial / 300.0
C# Tutorial / 200.0
HTML Tutorial / 120.05. subList(int,int)
Метод subList(int,int) возвращает частичное представление текущего объекта List, включая элементы из индекса fromIndex до tolndex.
Объект "subList" и текущий объект List связаны между собой, например, если вы удалите элемент в "subList", этот элемент также будет удален из текущего объекта List.
List<E> subList(int fromIndex, int toIndex);
List_subList.java
package org.o7planning.list.ex;
import java.util.ArrayList;
import java.util.List;
public class List_subList {
public static void main(String[] args) {
// Create a List
List<String> originList = new ArrayList<String>();
originList.add("A"); // 0
originList.add("B"); // 1
originList.add("C"); // 2
originList.add("D"); // 3
originList.add("E"); // 4
List<String> subList = originList.subList(1, 3); // fromIndex .. toIndex
System.out.println("Elements in subList: ");
for(String s: subList) {
System.out.println(s); // B C
}
subList.clear(); // Remove all elements from subList.
System.out.println("Elements in original List after removing all elements from subList: ");
for(String s: originList) {
System.out.println(s); // B C
}
}
}Output:
Elements in subList:
B
C
Elements in original List after removing all elements from subList:
A
D
E6. spliterator()
Создаем объект Spliterator для обхода и секционирования (traversing and partitioning) элементов List.
default Spliterator<E> spliterator() // Java 8Spliterator широко используется для обхода и секционирования (traversing and partitioning) множества различных источников данных, таких как Collection (List, Set, Queue), BaseStream, array.
- Руководство Java Spliterator
7. toArray(..)
Метод toArray(..) возвращает массив, содержащий все элементы List.
Object[] toArray();
<T> T[] toArray(T[] a);
// Java 11, The default method, inherited from Collection.
default <T> T[] toArray(IntFunction<T[]> generator)Например:
List_toArray.java
package org.o7planning.list.ex;
import java.util.ArrayList;
import java.util.List;
public class List_toArray {
public static void main(String[] args) {
List<String> list = new ArrayList<String>();
list.add("A"); // 0
list.add("B"); // 1
list.add("C"); // 2
list.add("D"); // 3
list.add("E"); // 4
String[] array = new String[list.size()];
list.toArray(array);
for(String s: array) {
System.out.println(s);
}
}
}Output:
A
B
C
D
E8. sort(Comparator)
Метод sort(Comparator) по умолчанию опирается на объект Comparator, который предназначен для сравнения элементов в List и сортировки их по порядку.
default void sort(Comparator<? super E> c)Пример: Объект List содержит элементы типа Book, мы сортируем их по цене и названию в порядке возрастания.
List_sort_ex1.java
package org.o7planning.list.ex;
import java.util.ArrayList;
import java.util.List;
public class List_sort_ex1 {
public static void main(String[] args) {
Book b1 = new Book("Python Tutorial", 100f);
Book b2 = new Book("HTML Tutorial", 120f);
Book b3 = new Book("Java Tutorial", 300f);
Book b4 = new Book("Javafx Tutorial", 100f);
Book b5 = new Book("CSS Tutorial", 300f);
List<Book> bookList = new ArrayList<Book>();
bookList.add(b1);
bookList.add(b2);
bookList.add(b3);
bookList.add(b4);
bookList.add(b5);
// Sort by ascending price.
// And Sort by ascending title.
bookList.sort((book1, book2) -> {
float a = book1.getPrice() - book2.getPrice();
if(a > 0) {
return 1;
} else if(a < 0) {
return -1;
}
int b = book1.getTitle().compareTo(book2.getTitle());
return b;
});
for(Book b: bookList) {
System.out.println(b.getPrice() +" : " + b.getTitle());
}
}
}Output:
100.0 : Javafx Tutorial
100.0 : Python Tutorial
120.0 : HTML Tutorial
300.0 : CSS Tutorial
300.0 : Java TutorialВ приведенном выше примере используются некоторые новые понятия, введенные из Java 8, такие как Functional interface, выражение Lambda. Вы можете прочитать больше из приведенных ниже статей, чтобы получить более подробное объяснение:
- Functional Interface
- Comparator
9. replaceAll(UnaryOperator)
Метод replaceAll(UnaryOperator) использует предоставленный параметр UnaryOperator для замены каждого элемента в List новым.
default void replaceAll(UnaryOperator<E> operator)Например: List содержит элементы типа Book, заменяя каждый из его элементов Book новой Book для увеличения цены на 50%.
List_replaceAll.java
package org.o7planning.list.ex;
import java.util.ArrayList;
import java.util.List;
public class List_replaceAll {
public static void main(String[] args) {
Book b1 = new Book("Python Tutorial", 100f);
Book b2 = new Book("HTML Tutorial", 120f);
Book b3 = new Book("Java Tutorial", 300f);
Book b4 = new Book("Javafx Tutorial", 100f);
Book b5 = new Book("CSS Tutorial", 300f);
List<Book> bookList = new ArrayList<Book>();
bookList.add(b1);
bookList.add(b2);
bookList.add(b3);
bookList.add(b4);
bookList.add(b5);
// Replace Book with new Book with the price increased by 50%.
bookList.replaceAll(b -> new Book(b.getTitle(), b.getPrice() * 150f/100));
for(Book b: bookList) {
System.out.println(b.getPrice() + " : " + b.getTitle());
}
}
}Output:
150.0 : Python Tutorial
180.0 : HTML Tutorial
450.0 : Java Tutorial
150.0 : Javafx Tutorial
450.0 : CSS Tutorial- Руководство Java UnaryOperator
Руководства Java Collections Framework
- Руководство Java PriorityBlockingQueue
- Руководство Java Collections Framework
- Руководство Java SortedSet
- Руководство Java List
- Руководство Java Iterator
- Руководство Java NavigableSet
- Руководство Java ListIterator
- Руководство Java ArrayList
- Руководство Java CopyOnWriteArrayList
- Руководство Java LinkedList
- Руководство Java Set
- Руководство Java TreeSet
- Руководство Java CopyOnWriteArraySet
- Руководство Java Queue
- Руководство Java Deque
- Руководство Java IdentityHashMap
- Руководство Java WeakHashMap
- Руководство Java Map
- Руководство Java SortedMap
- Руководство Java NavigableMap
- Руководство Java HashMap
- Руководство Java TreeMap
- Руководство Java PriorityQueue
- Руководство Java BlockingQueue
- Руководство Java ArrayBlockingQueue
- Руководство Java TransferQueue
Show More