MyTetra Share
Делитесь знаниями!
Класс ArrayList и интерфейс List
Время создания: 01.11.2019 09:30
Раздел: INFO - Development - JAVA - Collection
Запись: wwwlir/Tetra/master/base/1572571801y4ruzp8pzx/text.html на raw.githubusercontent.com

Пример инициализации

contract.setFiles(new ArrayList<ContractFile>(){{add(cf);}});
contract.setFiles(new ArrayList<ContractFile>(Arrays.asList(cf)));
contract.setFiles(Arrays.asList(cf));

Для создания простых списков применяется интерфейс List, который расширяет функцональность интерфейса Collection. Некоторые наиболее часто используемые методы интерфейса List:

  • void add(int index, E obj): добавляет в список по индексу index объект obj
  • boolean addAll(int index, Collection<? extends E> col): добавляет в список по индексу index все элементы коллекции col. Если в результате добавления список был изменен, то возвращается true, иначе возвращается false
  • E get(int index): возвращает объект из списка по индексу index
  • int indexOf(Object obj): возвращает индекс первого вхождения объекта obj в список. Если объект не найден, то возвращается -1
  • int lastIndexOf(Object obj): возвращает индекс последнего вхождения объекта obj в список. Если объект не найден, то возвращается -1
  • ListIterator<E> listIterator (): возвращает объект ListIterator для обхода элементов списка
  • static <E> List<E> of(элементы): создает из набора элементов объект List
  • E remove(int index): удаляет объект из списка по индексу index, возвращая при этом удаленный объект
  • E set(int index, E obj): присваивает значение объекта obj элементу, который находится по индексу index
  • void sort(Comparator<? super E> comp): сортирует список с помощью компаратора comp
  • List<E> subList(int start, int end): получает набор элементов, которые находятся в списке между индексами start и end

По умолчанию в Java есть встроенная реализация этого интерфейса - класс ArrayList. Класс ArrayList представляет обобщенную коллекцию, которая наследует свою функциональность от класса AbstractList и применяет интерфейс List. Проще говоря, ArrayList представляет простой список, аналогичный массиву, за тем исключением, что количество элементов в нем не фиксировано.

ArrayList имеет следующие конструкторы:

  • ArrayList(): создает пустой список
  • ArrayList(Collection <? extends E> col): создает список, в который добавляются все элементы коллекции col.
  • ArrayList (int capacity): создает список, который имеет начальную емкость capacity

Емкость в ArrayList представляет размер массива, который будет использоваться для хранения объектов. При добавлении элементов фактически происходит перераспределение памяти - создание нового массива и копирование в него элементов из старого массива. Изначальное задание емкости ArrayList позволяет снизить подобные перераспределения памяти, тем самым повышая производительность.

Используем класс ArrayList и некоторые его методы в программе:


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

import java.util.ArrayList;

 

public class Program{

      

    public static void main(String[] args) {

          

        ArrayList<String> people = new ArrayList<String>();

        // добавим в список ряд элементов

        people.add("Tom");

        people.add("Alice");

        people.add("Kate");

        people.add("Sam");

        people.add(1, "Bob"); // добавляем элемент по индексу 1

          

        System.out.println(people.get(1));// получаем 2-й объект

        people.set(1, "Robert"); // установка нового значения для 2-го объекта

          

        System.out.printf("ArrayList has %d elements \n", people.size());

        for(String person : people){

          

            System.out.println(person);

        }

        // проверяем наличие элемента

        if(people.contains("Tom")){

          

            System.out.println("ArrayList contains Tom");

        }

          

        // удалим несколько объектов

        // удаление конкретного элемента

        people.remove("Robert");

        // удаление по индексу

        people.remove(0);

          

        Object[] peopleArray = people.toArray();

        for(Object person : peopleArray){

          

            System.out.println(person);

        }

    }

}

Консольный вывод программы:

Bob

ArrayList has 5 elements

Tom

Robert

Alice

Kate

Sam

ArrayList contains Tom

Alice

Kate

Sam

Здесь объект ArrayList типизируется классом String, поэтому список будет хранить только строки. Поскольку класс ArrayList применяет интерфейс Collection<E>, то мы можем использовать методы данного интерфейса для управления объектами в списке.

Для добавления вызывается метод add. С его помощью мы можем добавлять объект в конец списка: people.add("Tom"). Также мы можем добавить объект на определенное место в списке, например, добавим объект на второе место (то есть по индексу 1, так как нумерация начинается с нуля): people.add(1, "Bob")

Метод size() позволяет узнать количество объектов в коллекции.

Проверку на наличие элемента в коллекции производится с помощью метода contains. А удаление с помощью метода remove. И так же, как и с добавлением, мы можем удалить либо конкретный элемент people.remove("Tom");, либо элемент по индексу people.remove(0); - удаление первого элемента.

Получить определенный элемент по индексу мы можем с помощью метода get(): String person = people.get(1);, а установить элемент по индексу с помощью метода set: people.set(1, "Robert");

С помощью метода toArray() мы можем преобразовать список в массив объектов.

И поскольку класс ArrayList реализует интерфейс Iterable, то мы можем пробежаться по списку в цикле аля for-each: for(String person : people).

Хотя мы можем свободно добавлять в объект ArrayList дополнительные объекты, в отличие от массива, однако в реальности ArrayList использует для хранения объектов опять же массив. По умолчанию данный массив предназначен для 10 объектов. Если в процессе программы добавляется гораздо больше, то создается новый массив, который может вместить в себя все количество. Подобные перераспределения памяти уменьшают производительность. Поэтому если мы точно знаем, что у нас список не будет содержать больше определенного количества элементов, например, 25, то мы можем сразу же явным образом установить это количество, либо в конструкторе: ArrayList<String> people = new ArrayList<String>(25);, либо с помощью метода ensureCapacity: people.ensureCapacity(25);

Так же в этом разделе:
 
MyTetra Share v.0.59
Яндекс индекс цитирования