ArrayList в Java с примерами

Сегодня мы поработаем с ArrayList в Java: посмотрим на примерах самые популярные и полезные методы.

Данный урок является прямым продолжением статьи Коллекции в java, в которой мы разобрали основы и структуру классов коллекций. Теперь, попробуем немного попрактиковаться на примерах.

ArrayList — коллекция на основе массива. Это означает, что она имеет все преимущества и недостатки массивов java.

Это также означает, что работа с элементами данной коллекции подразумевает под собой работу с элементами массива. То есть — «под капотом» данного класса находится массив в чистом виде. Фактически, разработчики предоставляют нам удобные и простые методы для работы с массивом. Соответственно, использовать ArrayList нужно тогда, когда необходима скорость чтения из коллекции, но менее важна скорость удаления данных.

Какие основные методы предоставляет нам ArrayList:

  • add(element) — добавляет элемент в коллекцию;
  • get(index) — достает элемент по индексу;
  • clear() — полностью очищает коллекцию;
  • addAll(another_collection) — добавляет один список в другой;
  • remove(index) — удяляет объект по индексу;
  • remove(object) удаляет по объекту;
  • removeAll(collection_with_remove_elements) — если нужно удалить целый список объектов;
  • size() — возвращает длину коллекции;
  • isEmpty() — проверяет на пустоту;
  • forEach() — обход всех элементов.

Выше я перечислил только самые используемые методы класса ArrayList. Теперь, посмотрим пример их использования:

import java.util.ArrayList;

public class ArrayListExample {

    public static void main(String[] args) {
        ArrayList<String> stringArrayList = new ArrayList<>();
        stringArrayList.add("Monica");
        stringArrayList.add("Chandler");
        stringArrayList.add("Ross");
        stringArrayList.add("Rachel");
        stringArrayList.add("Joe");
        stringArrayList.add("Phoebe");

        ArrayList<String> clonnedArrayList = (ArrayList<String>) stringArrayList.clone();

        String element = stringArrayList.get(2);
        System.out.println(element); //Ross

        System.out.println(stringArrayList.size()); //6

        stringArrayList.clear();

        System.out.println(stringArrayList.size()); //0

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

        stringArrayList1.add("Monica");
        stringArrayList1.add("Chandler");
        stringArrayList1.add("Ross");

        stringArrayList.addAll(stringArrayList1);

        System.out.println(stringArrayList.size()); //3

        stringArrayList.remove(0);

        stringArrayList.remove("Ross");

        System.out.println(stringArrayList.size()); //1

        stringArrayList.removeAll(stringArrayList1);

        System.out.println(stringArrayList.isEmpty()); //true

        System.out.println(clonnedArrayList.isEmpty()); //false

        System.out.println(clonnedArrayList.contains("Monica")); //true

        System.out.println(clonnedArrayList.indexOf("Chandler")); //1

        System.out.println(clonnedArrayList.indexOf("Terminator")); //-1

        List<String> sublist = clonnedArrayList.subList(3, 6);

        System.out.println(sublist.size()); //3
        System.out.println(clonnedArrayList.size()); //6

    }
}

Как видно на примере выше — работать с ArrayList очень просто и удобно. Названия методов говорят сами за себя.

Начнем с самого начала инициализации ArrayList. Все списки принимают только объекты одного типа. Поэтому, перед инициализацией необходимо указать: с каким типом данных мы будем работать. В примере выше я выбрал тип данных String поэтому должен был явно указать его при создании коллекции массива. Далее, при работе с колекцией, я должен добавлять только строки и работать со строками. Иначе, будет ошибка компиляции. Одной из причин появления классов оберток для примитивных типов является то, что коллекции не работают с примитивами — только с объектами. Поэтому, такой тип записи работать не будет:

ArrayList<int> intList = new ArrayList<>();

Если Вы планируете создавать списки целочисленных или дробних значений — нужно воспользоваться классами обертками примитивных типов:

ArrayList<Integer> intList = new ArrayList<>();

Отдельно я хочу показать как обходить ArrayList и выводить его значения.

import java.util.ArrayList;

public class ArrayListExample {

    public static void main(String[] args) {
        ArrayList<String> stringArrayList = new ArrayList<>();
        stringArrayList.add("Monica");
        stringArrayList.add("Chandler");
        stringArrayList.add("Ross");
        stringArrayList.add("Rachel");
        stringArrayList.add("Joe");
        stringArrayList.add("Phoebe");
        
        stringArrayList.stream().forEach(it-> System.out.println(it)); //используя стримы
        
        stringArrayList.forEach(it-> System.out.println(it));//используя стримы вызывая напрямую метод forEach
        
        stringArrayList.forEach(System.out::println); //используя стримы и method reference

        for (String s:stringArrayList) {//используя форич (foreach)
            System.out.println(s);
        }
        
        for(int i=0; i<stringArrayList.size(); i++){//по старинке, используя индекс
            System.out.println(stringArrayList.get(i));
        }
    }
}

Поскольку работа с элементами ArrayList и особенно вывод их в консоль — очень распространенная операция, я решил показать несколько примеров вывода. Конечно же, я предпочитаю тот, который самый простой и требует найменьше затрат по написанию:

stringArrayList.forEach(System.out::println);

Это все, что я хотел показать по теме работы с ArrayList. Когда Вы начнете использовать данный вид коллекции — примеры выше помогут разобраться на начальных этапах. Дальше, их использование будет интуитивным и понятным.

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

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