Объяснение java arraylist на примерах

Method Summary

All MethodsInstance MethodsConcrete Methods

Modifier and Type Method Description
Inserts the specified element at the specified position in this
list.
Appends the specified element to the end of this list.
Inserts all of the elements in the specified collection into this
list, starting at the specified position.
Appends all of the elements in the specified collection to the end of
this list, in the order that they are returned by the
specified collection’s Iterator.
Removes all of the elements from this list.
Returns a shallow copy of this instance.
Returns if this list contains the specified element.
Increases the capacity of this instance, if
necessary, to ensure that it can hold at least the number of elements
specified by the minimum capacity argument.
Performs the given action for each element of the
until all elements have been processed or the action throws an
exception.
Returns the element at the specified position in this list.
Returns the index of the first occurrence of the specified element
in this list, or -1 if this list does not contain the element.
Returns if this list contains no elements.
Returns an iterator over the elements in this list in proper sequence.
Returns the index of the last occurrence of the specified element
in this list, or -1 if this list does not contain the element.
Returns a list iterator over the elements in this list (in proper
sequence).
Returns a list iterator over the elements in this list (in proper
sequence), starting at the specified position in the list.
Removes the element at the specified position in this list.
Removes the first occurrence of the specified element from this list,
if it is present.
Removes from this list all of its elements that are contained in the
specified collection.
Removes all of the elements of this collection that satisfy the given
predicate.
Removes from this list all of the elements whose index is between
, inclusive, and , exclusive.
Retains only the elements in this list that are contained in the
specified collection.
Replaces the element at the specified position in this list with
the specified element.
Returns the number of elements in this list.
Creates a
and fail-fast over the elements in this
list.
Returns a view of the portion of this list between the specified
, inclusive, and , exclusive.
Returns an array containing all of the elements in this list
in proper sequence (from first to last element).
Returns an array containing all of the elements in this list in proper
sequence (from first to last element); the runtime type of the returned
array is that of the specified array.
Trims the capacity of this instance to be the
list’s current size.

Потокобезопасность

Открытые статические ( в Visual Basic) члены этого типа являются потокобезопасными.Public static ( in Visual Basic) members of this type are thread safe. Потокобезопасная работа с членами экземпляров типа не гарантируется.Any instance members are not guaranteed to be thread safe.

ArrayListМожет поддерживать одновременно несколько модулей чтения, если коллекция не изменяется.An ArrayList can support multiple readers concurrently, as long as the collection is not modified. Чтобы обеспечить потокобезопасность ArrayList , все операции должны выполняться через оболочку, возвращенную методом.To guarantee the thread safety of the ArrayList, all operations must be done through the wrapper returned by the method.

Перечисление коллекции не является потокобезопасной процедурой.Enumerating through a collection is intrinsically not a thread-safe procedure. Даже если коллекция синхронизирована, другие потоки могут ее изменить, что приведет к тому, что перечислитель создаст исключение.Even when a collection is synchronized, other threads can still modify the collection, which causes the enumerator to throw an exception. Для обеспечения потокобезопасности при перечислении можно либо заблокировать коллекцию на все время перечисления, либо перехватывать исключения, возникающие в результате изменений, внесенных другими потоками.To guarantee thread safety during enumeration, you can either lock the collection during the entire enumeration or catch the exceptions resulting from changes made by other threads.

Методы

Помимо методов, унаследованных от родительских классов, 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 до его текущих размеров.

Пример 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

Определение

Пространство имен:
System.Collections
Сборки:
mscorlib.dll, System.Collections.NonGeneric.dll
Сборка:
System.Runtime.dll
Сборка:
System.Collections.NonGeneric.dll
Сборка:
System.Runtime.Extensions.dll
Сборка:
mscorlib.dll
Сборка:
netstandard.dll

Реализует интерфейс IList с помощью массива с динамическим изменением размера по требованию.Implements the IList interface using an array whose size is dynamically increased as required.

В этой статье

Наследование

Object
ArrayList

Производный
Атрибуты

SerializableAttribute

ComVisibleAttribute

Реализации

ICollection

IEnumerable

IList

ICloneable

Double-Brace Initialization

In several places, we can find a method called ‘double brace initialization’ which looks like:

The name ‘double brace initialization’ is quite misleading. The syntax may look compact and elegant but it dangerously hides what is going under the hood.

There isn’t actually a ‘double brace’ syntax element in Java, those are two blocks formatted intentionally this way.

With the outer braces, we declare an anonymous inner class which will be a subclass of the ArrayList. Inside these braces, we can declare the details of our subclass.

As usual, we can use instance initializer blocks and that is where the inner pair of braces come from.

The brevity of this syntax is tempting however it’s considered an anti-pattern.

To read more about double-brace initialization, have a look at our article here.

Итерации

Вы можете выполнить итерацию списка несколькими различными способами. Три наиболее распространенных способа:

  • Использование итератора
  • Использование цикла for-each
  • Использование цикла for
  • Использование API Java Stream

Итерация списка с помощью итератора

Первый способ итерации списка — использовать итератор Java.

List list = new ArrayList();

list.add("first");
list.add("second");
list.add("third");

Iterator iterator = list.iterator();
while(iterator.hasNext()) {
    Object next = iterator.next();
}

Вызывая метод iterator () интерфейса List.

Вызов hasNext () выполняется внутри цикла while.

Внутри цикла while вы вызываете метод Iterator next () для получения следующего элемента, на который указывает Iterator.

Если список задан с использованием Java Generics, вы можете сохранить некоторые объекты внутри цикла while.

List<String> list = new ArrayList<>();

list.add("first");
list.add("second");
list.add("third");
    
Iterator<String> iterator = list.iterator();
while(iterator.hasNext()){
    String obj = iterator.next();
}

Итерация списка с использованием цикла For-Each

Второй способ итерации List — использовать цикл for.

List list = new ArrayList();

list.add("first");
list.add("second");
list.add("third");

for(Object element : list) {
    System.out.println(element);
}

Цикл for выполняется один раз для каждого элемента. Внутри цикла for каждый элемент, в свою очередь, связан с переменной obj.

Можно изменить тип переменной внутри цикла for.

List<String> list = new ArrayList<String>();

//add elements to list

for(String element : list) {
    System.out.println(element);
}

Итерация списка с помощью цикла For

Третий способ итерации List — использовать стандартный цикл for, подобный следующему:

List list = new ArrayList();

list.add("first");
list.add("second");
list.add("third");
    
for(int i=0; i < list.size(); i++) {
    Object element = list.get(i);
}

Цикл for создает переменную int и инициализирует ее 0. Затем она зацикливается, пока переменная int i меньше размера списка. Для каждой итерации переменная i увеличивается.

Внутри цикла for обращаемся к элементам List с помощью метода get (), передавая в качестве параметра переменную i.

Опять же, если список напечатан с использованием Java Generics, например, для для строки, то вы можете использовать универсальный тип списка в качестве типа для локальной переменной, которая присваивается каждому элементу списка во время итерации.

List<String> list = new ArrayList<String>();

list.add("first");
list.add("second");
list.add("third");
    
for(int i=0; i < list.size(); i++) {
    String element = list.get(i);
}

Тип локальной переменной внутри цикла for теперь String. Поскольку список обычно типизируется как String, он может содержать только объекты String.

Следовательно, компилятор знает, что только метод String может быть возвращен из метода get (). Поэтому вам не нужно приводить элемент, возвращенный get (), в String.

Перебор списка с использованием API Java Stream

Четвертый способ итерации через API Java Stream. Для итерации вы должны сначала получить поток из списка. Получение потока из списка в Java выполняется путем вызова метода Liststream ().

List<String> stringList = new ArrayList<String>();

stringList.add("abc");
stringList.add("def");

Stream<String> stream = stringList.stream();

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

List<String> stringList = new ArrayList<String>();

stringList.add("one");
stringList.add("two");
stringList.add("three");

Stream<String> stream = stringList.stream();
stream
    .forEach( element -> { System.out.println(element); });

Вызов метода forEach () заставит Stream выполнить внутреннюю итерацию всех элементов потока.

Оцени статью

Оценить

Средняя оценка / 5. Количество голосов:

Видим, что вы не нашли ответ на свой вопрос.

Помогите улучшить статью.

Спасибо за ваши отзыв!

Как сохранить все элементы из одного списка в другом

Интерфейс Java List имеет метод retainAll(), который способен сохранять все элементы из одного списка, которые также присутствуют в другом списке. Другими словами, метод retain() удаляет все элементы из целевого списка, которые не найдены в другом списке. Полученный список является пересечением двух списков. Вот Java-пример вызова метода List retainAll():

List list      = new ArrayList();
List otherList = new ArrayList();

String element1 = "element 1";
String element2 = "element 2";
String element3 = "element 3";
String element4 = "element 4";

list.add(element1);
list.add(element2);
list.add(element3);

otherList.add(element1);
otherList.add(element3);
otherList.add(element4);

list.retainAll(otherList);
  • Первые два списка созданы.
  • 3 элемента добавляются в list, а 3 элемента в otherList.
  • Метод retainAll() вызывается, передавая otherList в качестве параметра. После того, как list.retainAll(otherList) завершит выполнение, список будет содержать только те элементы, которые присутствовали как в list, так и otherList до вызова retainAll(). Более конкретно, это element1 и element3.

Creating an ArrayList

Before using , we need to import the package first. Here is how we can create arraylists in Java:

Here, Type indicates the type of an arraylist. For example,

In the above program, we have used not int. It is because we cannot use primitive types while creating an arraylist. Instead, we have to use the corresponding wrapper classes.

Here, is the corresponding wrapper class of . To learn more, visit the Java wrapper class.

Example: Create ArrayList in Java

Output

ArrayList: 

In the above example, we have created an named languages.

Here, we have used the method to add elements to the arraylist. We will learn more about the method later in this tutorial.

Note: We can also create an arraylist using the interface. It’s because the class implements the interface.

Positional Access and Search Operations

The basic operations are , , and . (The and operations return the old value that is being overwritten or removed.) Other operations ( and ) return
the first or last index of the specified element in the list.

The operation inserts all the elements of the specified starting at the specified position. The elements are inserted in the order they are returned by the specified ‘s iterator. This call is the positional access analog of ‘s operation.

Here’s a little method to swap two indexed values in a .

public static <E> void swap(List<E> a, int i, int j) {
    E tmp = a.get(i);
    a.set(i, a.get(j));
    a.set(j, tmp);
}

Of course, there’s one big difference. This is a polymorphic algorithm: It swaps two elements in any , regardless of its implementation type. Here’s another polymorphic algorithm that uses the preceding method.

public static void shuffle(List<?> list, Random rnd) {
    for (int i = list.size(); i > 1; i--)
        swap(list, i - 1, rnd.nextInt(i));
}

This algorithm, which is included in the Java platform’s
class, randomly permutes the specified list using the specified source of randomness. It’s a bit subtle: It runs up the list from the bottom, repeatedly swapping a randomly selected element into the current position. Unlike most naive attempts at shuffling, it’s fair (all permutations occur with equal likelihood, assuming an unbiased source of randomness) and fast (requiring exactly swaps). The following program uses this algorithm to print the words in its argument list in random order.

import java.util.*;

public class Shuffle {
    public static void main(String[] args) {
        List<String> list = new ArrayList<String>();
        for (String a : args)
            list.add(a);
        Collections.shuffle(list, new Random());
        System.out.println(list);
    }
}

In fact, this program can be made even shorter and faster. The
class has a static factory method called , which allows an array to be viewed as a . This method does not copy the array. Changes in the write through to the array and vice versa. The resulting List is not a general-purpose implementation, because it doesn’t implement the (optional) and operations: Arrays are not resizable. Taking advantage of and calling the library version of , which uses a default source of randomness, you get the following
whose behavior is identical to the previous program.

import java.util.*;

public class Shuffle {
    public static void main(String[] args) {
        List<String> list = Arrays.asList(args);
        Collections.shuffle(list);
        System.out.println(list);
    }
}

Methods of ArrayList Class

In previous section, we have learned about the , , , and method of the class.

Besides those basic methods, here are some more methods that are commonly used.

Methods Descriptions
size() Returns the length of the arraylist.
sort() Sort the arraylist elements.
clone() Creates a new arraylist with the same element, size, and capacity.
contains() Searches the arraylist for the specified element and returns a boolean result.
ensureCapacity() Specifies the total element the arraylist can contain.
isEmpty() Checks if the arraylist is empty.
indexOf() Searches a specified element in an arraylist and returns the index of the element.

If you want to learn about all the different methods of arraylist, visit Java ArrayList methods.

Сортировка по убыванию

Мы используем метод Collections.reverseOrder() вместе с Collections.sort() для сортировки списка в порядке убывания. В приведенном ниже примере мы использовали инструкцию для сортировки в обратном порядке: Collections.sort (arraylist, Collections.reverseOrder ()).

Однако это также можно выполнить следующим образом. Тогда список будет сначала отсортирован в порядке возрастания, а затем будет перевернут:

  1. Collections.sort (список);
  2. 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.

Java forEach на карте

В следующем примере на карте используется forEach().

package com.zetcode;

import java.util.HashMap;
import java.util.Map;

public class JavaForEachMap {

    public static void main(String[] args) {

        Map<String, Integer> items = new HashMap<>();

        items.put("coins", 3);
        items.put("pens", 2);
        items.put("keys", 1);
        items.put("sheets", 12);

        items.forEach((k, v) -> {
            System.out.printf("%s : %d%n", k, v);
        });
    }
}

У нас есть карта пар строка / целое число. С помощью метода forEach() мы перебираем карту и печатаем ее пары ключ / значение.

В следующем примере мы явно показываем Consumer и Map.Entry в коде.

package com.zetcode;

import java.util.HashMap;
import java.util.Map;
import java.util.function.Consumer;

public class ForEachMap2 {

    public static void main(String[] args) {

        HashMap<String, Integer> map = new HashMap<>();

        map.put("cups", 6);
        map.put("clocks", 2);
        map.put("pens", 12);

        Consumer<Map.Entry<String, Integer>> action = entry ->
        {
            System.out.printf("key: %s", entry.getKey());
            System.out.printf(" value: %s%n", entry.getValue());
        };

        map.entrySet().forEach(action);
    }
}

В примере выполняется цикл для набора записей, который извлекается с помощью entrySet().

Интерфейс List

java.util.List является интерфейсом и его можно использовать вместо ArrayList следующим образом:

Или укороченный вариант для Java 7:

Как видите, мы заменили ArrayList на List, но при этом в объявлении оставили new ArrayList(). Всё остальное остаётся без изменений. Кстати, этот способ является рекомендуемым. Но иногда он может не подойти.

Контейнеры List гарантируют определённый порядок следования элементов. Интерфейс List дополняет Collection несколькими методами, обеспечивающими вставку и удаление элементов в середине списка.

Существует две основные разновидности List:

  • Базовый контейнер ArrayList, оптимизированный для произвольного доступа к элементам, но с относительно медленными операциями вставки/удаления элементов в середине списка.
  • Контейнер LinkedList, оптимизированный для последовательного доступа, с быстрыми операциями вставки/удаления в середине списка. Произвольный доступ к элементам LinkedList выполняется относительно медленно, но по широте возможностей превосходит ArrayList.

В отличие от массива контейнер List позволяет добавлять и удалять элементы после создания, а также изменяет свои размеры.

Метод contains() проверяет, присутствует ли объект в списке. Чтобы удалить объект, передайте ссылку на него методу remove(). Кроме того, если у вас имеется ссылка на объект, вы можете определить индекс объекта в List при помощи метода indexOf().

Сам List реализует более общий интерфейс коллекции Collection и можно было даже написать:

Но у Collection нет методов set() и get(), поэтому работать с таким интерфейсом не очень удобно.

Для создания массива можно не только добавлять по одному объекту через метод add(), но и сразу массив через метод Arrays.asList().

Оставим пока в покое котов и создадим массив из объектов Integer.

Но у данного способа есть недостаток. Если вы определили массив таким образом, то уже не можете вставлять или удалять другой элемент (методы add() и delete()), хотя при этом можете изменять существующий элемент.

В Android 11 (R) обещают добавить несколько перегруженных версий метода of(), которые являются частью Java 8.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock
detector