What does List<String> [] mean in java?
I know what a list is in java and also generic but whats the purpose of the array bracket in this case. Does this mean it’s an array of list of strings?
3 Answers 3
It’s an array of list of strings.
![]()
List[] result : Contains three things 1. List 2. [] 3. result
- Data type is List of strings
- Array
- variable name
So in this case result will store Array of List of string.
![]()
Represents a variable declared to contain Datatype of List of Strings which is also an Array.
Although this sort of syntax is seldomly used.
![]()
-
The Overflow Blog
Related
Hot Network Questions
Subscribe to RSS
To subscribe to this RSS feed, copy and paste this URL into your RSS reader.
Site design / logo © 2023 Stack Exchange Inc; user contributions licensed under CC BY-SA . rev 2023.6.8.43486
By clicking “Accept all cookies”, you agree Stack Exchange can store cookies on your device and disclose information in accordance with our Cookie Policy.
Интерфейс Java List Collection с примерами
Интерфейс Java List, java.util.List, представляет упорядоченную последовательность объектов. Элементы, содержащиеся в списке Java, могут быть вставлены, повторены и удалены в соответствии с порядком их появления в нем. Порядок элементов – вот почему эта структура данных называется списком.
Каждый элемент имеет индекс: первый элемент – 0, второй – 1 и т. д. Индекс означает «сколько элементов находится в начале». Таким образом, первый элемент находится на расстоянии 0 элементов от начала списка, потому что он находится в начале.
Вы можете добавить любой объект в список. Если он не типизирован с использованием Java Generics, то вы можете даже смешивать объекты разных типов (классов) в одном и том же списке. Однако на практике это происходит не часто.
Интерфейс List является стандартным интерфейсом и подтипом интерфейса Collection, что означает, что List наследуется от Collection.
List против Set
Интерфейсы List и Set очень похожи в том, что они оба представляют коллекцию элементов. Тем не менее, есть некоторые существенные различия, отраженные в методах, предлагаемых интерфейсами:
- Один и тот же элемент может встречаться в списке более одного раза. Это отличается от набора, где каждый элемент может встречаться только один раз.
- Элементы в List имеют порядок, и могут повторяться в этом порядке. Набор не дает никаких обещаний относительно порядка элементов, хранящихся внутри.
Реализации
Будучи подтипом Collection, все методы в интерфейсе Collection также доступны в интерфейсе List.
Поскольку List – это интерфейс, вам нужно создать конкретную реализацию интерфейса, чтобы использовать его, либо выбрать между следующими в API коллекций:
-
;
- 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):
Также возможно итерировать элементы списка в том порядке, в котором они хранятся внутри.
Как найти элементы
Используется один из этих двух методов:
- indexOf();
- LastIndexOf().
Метод 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 параметра:
- Начальный индекс – это индекс первого элемента из исходного списка для включения в подсписок.
- Конечный индекс является последним индексом подсписка, но элемент в последнем индексе не включается в подсписок.
Это похоже на то, как работает метод подстроки 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() для каждого элемента в потоке.
Java List Collection Tutorial and Examples

A list can store objects of any types. Primitive types are automatically converted to corresponding wrapper types, e.g. integer numbers are converted to Integer objects. It allows null and duplicate elements, and orders them by their insertion order (index).
The following class diagram depicts the primary methods defined in the java.util.List interface:

The List is the base interface for all list types, and the ArrayList and LinkedList classes are two common List ’s implementations.
-
- ArrayList : An implementation that stores elements in a backing array. The array’s size will be automatically expanded if there isn’t enough room when adding new elements into the list. It’s possible to set the default size by specifying an initial capacity when creating a new ArrayList . Basically, an ArrayList offers constant time for the following operations: size , isEmpty , get , set , iterator , and listIterator ; amortized constant time for the add operation; and linear time for other operations. Therefore, this implementation can be considered if we want fast, random access of the elements.
- LinkedList : An implementation that stores elements in a doubly-linked list data structure. It offers constant time for adding and removing elements at the end of the list; and linear time for operations at other positions in the list. Therefore, we can consider using a LinkedList if fast adding and removing elements at the end of the list is required.

The following is a quick example of creating a new ArrayList and LinkedList which hold String objects; add some elements to them; and then print out the collections:
-
ArrayList quick example:
2. Creating a new list
Since Java 7, we can remove the type parameter on the right side as follows:
The compiler is able to infer the actual type parameter from the declaration on the left side.
Since Java 9, you can create a List collection from a fixed set of elements by using the factory method List.of(e1, e2, e3…) . For example:
Note that the List collection returned by the List.of() factory method is immutable — meaning that you can’t add more elements to it.
Since Java 10, you can shorten the declaration of a List collection by using the var reserved word like this:
The compiler can infer the type of the variable on the left based on the object type on the right side. And var can be used to declare local variables only.
When creating a new ArrayList using the empty constructor, the list is constructed with an initial capacity of ten. If you are sure how many elements will be added to the list, it’s recommended to specify a capacity which is large enough. Let’s say, if we know that a list contains around 1000 elements, declare the list as follows:
It’s also possible to construct a list that takes elements from an existing collection, for example:
The listNumberTwo constructed with copies of all elements from the listNumberOne .
3. Basic List operations: adding, retrieving, updating, removing elements
The methods add(Object) , add(index, Object) and addAll() are used to add elements to the list. It requires to add elements of the same type (or sub type) as the type parameter declared by the list. For example:
Adding elements of sub types of the declared type:
We can insert an element into the list at a specified index, for example:
That inserts the String “Four” at the 2nd position in the list.
We can also add all elements of an existing collection to the end of the list:
Or add the elements to the list at a specified position:
That inserts all elements of the listWords collection at 3 rd position of the listStrings collection.
Retrieving elements from a List
The get() method is used to retrieve an element from the list at a specified index. For example, the following code gets an element at 2 nd position in the array list and an element at 4 th position in the linked list:
For a LinkedList implementation, we can get the first and the last elements like this:
Note that the getFirst() and getLast() methods are specific to the LinkedList class.
Updating elements in a List
Use the set(index, element) method to replace the element at the specified index by the specified element. For example:
That replaces the 3 rd element in the list by the new String “Hi”.
Removing elements from a List
To remove an element from the list, use the remove(index) or remove(Object) method which removes the element at the specified index or by object reference. For example:
-
- Remove the element at the 3 rd position in the list:
If the specified index is out of range (index < 0 or index >= list size), a java.lang.IndexOutOfBoundsException is thrown. - Remove the String element “Two” in the list:
-
- It compares the specified object with the elements in the list using their equals() method, so if you use your own defined object type, make sure it implements the equals() method correctly.
- It only removes the first occurrence of the specified element in the list (i.e. if a list contains duplicate elements, only the first element is removed).
- It returns true if the list contained the specified element, or false otherwise. Thus it’s recommended to check return value of this method, for example:
4. Iterating over elements in a list
Or use an iterator like this:
For more list-specific, use a list iterator as shown below:
Since Java 8, we can use the forEach() method like this:
For more details and examples, see the tutorial: Java Collections Looping Example
For more about the forEach iteration method, see the tutorial: The 4 Methods for Iterating Collections in Java
5. Searching for an element in a list
-
- boolean contains(Object) : returns true if the list contains the specified element.
- int indexOf(Object) : returns the index of the first occurrence of the specified element in the list, or -1 if the element is not found.
- int lastIndexOf(Object) : returns the index of the last occurrence of the specified element in the list, or -1 if the element is not found.
Note that the above methods compare the elements using their equals() method, so if you define your own type, make sure it implements the equals() method correctly.
6. Sorting a list
Note that all elements in the list must implement the Comparable interface, so if you define your own type, make sure it implements that interface and its compareTo() method.
Since Java 8, the List interface introduces the sort() method, so you can sort elements in an ArrayList or LinnkedList directly like this:
For more details and examples, see the article: Sorting List Collections Examples
7. Copying elements from one list into another
The output would be:
8. Shuffling elements in a list
The output would be:
9. Reversing elements in a list
The output would be:
10. Extracting a portion of a list
Note that the sub list is just a view of the original list, so any modifications made on the original list will reflect in the sub list.
11. Converting between Lists and arrays
The Arrays.asList(T… a) method converts an array of type T to a list of type T . Here’s an example:
And the List interface provides the toArray() method that returns an array of Objects containing all of the elements in the list in proper sequence (from first to last element). Here’s an example:
And the toArray(T[] a) method returns an array of type T , for example:
Note that the returned array contains copies of elements in the list, which that means we can safely modify the array without affecting the list.
12. List to Stream
List.stream() : returns a sequential stream.
List.parallelStream() : returns a possibly parallel stream.
For example, the following code converts a List numbers to a stream and uses the Stream API to calculate the sum of all numbers:
For more information about Java stream, read Understand Java Stream API.
13. Concurrent lists
Note that you must manually synchronize the returned list when iterating over it, for example:
Conclusion:
For hands-on practice on Java list collection, I recommend you to watch this video tutorial:
Related Java List tutorials:
Other Java Collections Tutorials:
API References for Java List:
About the Author:
Nam Ha Minh is certified Java programmer (SCJP and SCWCD). He started programming with Java in the time of Java 1.4 and has been falling in love with Java since then. Make friend with him on Facebook and watch his Java videos you YouTube.Подробный разбор класса ArrayList [Часть 1]
Поле, отвечающее за объем динамического массива по умолчанию:
При создании нового объекта new ArrayList<>() (конструктор без параметров) внутри создается массив на 10 элементов.
Поле, в котором хранятся все элементы коллекции:
Помечено ключевым словом transient – поле не записывается в поток байт при применении стандартного алгоритма сериализации. Стоит отметить, что поле не отмечено ключевым словом private , а сделано это для того, чтобы облегчить доступ к этому полю из вложенных классов (например, SubList).
Значение увеличивается/уменьшается при выполнении таких операций, как вставка и удаление.
- Remove the element at the 3 rd position in the list: