Что такое ArrayList в Java

Facebooktwittergoogle_plustumblrFacebooktwittergoogle_plustumblr

Вы уже умеете создавать массивы в Java?  Тогда самое время узнать что такое Arraylist. Ну что ж, поехали!

Допустим, Вы работаете программистом на компанию, которая осуществляет доставку товаров по всему миру. И Вам необходимо сохранить список городов, в которые осуществляется доставка.

Вы это можете сделать 2 способами:

1. С помощью обычного массива

2. С помощью Arraylist

Давайте рассмотрим каждый из этих способов. И тогда сразу станет понятно почему Arraylist - это лучший друг Java программиста.

 

1. С ПОМОЩЬЮ ОБЫЧНОГО МАССИВА

Создаем обычный массив с именем deliveryCities.  В фигурных скобках прописываем значения элементов массива, то есть названия городов. Например:

В результате, будет создан массив deliveryCities на 4 элемента. И если мы заходим получить 3-й элемент массива – мы напишем deliveryCities[2], поскольку 3-й элемент имеет индекс 2. Таким образом мы можем создать массив из элементов любого типа, после чего можем работать с этими элементами.

Но что, если мы хотим добавить еще один город для доставки, например, London?

"Та чего ж тут сложного?" - скажите Вы мне. "Просто берешь и увеличиваешь массив с 4 до 5 элементов."

И вот Вам мой ответ: "Так сделать не получится! Потому что в Java нет возможности изменять длину массивов. А это значит, что если Вы изначально создали массив на 4 элемента, значит уже этот массив будет всегда на 4 элемента."

Так как же быть??? Можно попробовать исхитриться и сделать следующее. Мы можем создать еще один массив, только уже не на 4, а на 5 элементов. Далее скопировать в этот массив 4 элемента из предыдущего массива плюс добавить еще один город - London.

Решение будет выглядеть так:

Таким образом мы сначала создали новый массив deliveryCities2 на единицу большей длины, чем первый массив, дальше поэлементно скопировали первый массив во второй и только потом последним элементом второго массива установили город London. Согласитесь, достаточно неудобно. К тому же нам пришлось создавать второй массив, чтобы вставить всего лишь 1 элемент. А как тогда быть? Есть ли более элегантное решение данной проблемы? Есть, и оно называется ArrayList.

2. С ПОМОЩЬЮ ARRAYLIST

Так что же такое Arraylist? Говоря простым и понятным языком, ArrayList – это список, который очень похож на массив за исключением того, что он имеет произвольную длину и целый ряд методов, которые позволяют добавлять, удалять, заменять элементы списка в любое время и в любом месте.

А это значит, что Вы можете, например, сначала создать Arraylist на 4 элемента, а потом взять и добавить еще 7 элементов, а потом удалить 2 элемента, а потом снова добавить 15 элементов и т.д. Вы поняли идею, Arraylist, как резиновый, его можно увеличивать или уменьшать безо всяких проблем. 

Также, как Вы помните, в статье по переменным, мы обсуждали, что всего есть 8 примитивных типов в Java. Так вот ArrayList к ним не относится. Arraylist - это так называемый объектный тип, который входит в Java Core, а именно java.util.ArrayList.

 

Работать с ArrayList очень и очень просто

Во-первых, как и в случае с массивами, нужно создать список. Создать список можно несколькими способами. Наиболее распространенным способом является следующая структура:

Для нашего примера с городами:

Как видите, сначала пишется ArrayList, после чего записываем угловые скобки, в которых записывается тип элементов списка. То есть, если мы хотим сохранять в списке строчки, – мы напишем в скобках String.

Но будьте внимательные: ArrayList не умеет работать с примитивными типами. Поэтому если Вы хотите сохранять примитивные типы, Вам нужно использовать классы-оболочки для соответствующих типов, о которых мы писали в этой статье. Таким образом для типа int класс-оболочка Integer, для типа double – Double и т.д.

Хорошо, список мы создали, но как в него добавить элементы, ведь пока что он пустой?

Это делается очень легко! У Arraylist есть ряд методов. Чтобы добавить элемент, необходимо использовать метод add(T element), где в круглых скобках записывается элемент, который мы хотим добавить. Таким образом, чтобы создать список и добавить в него 4 города, мы напишем:

Обратите внимание, что при создании списка мы не указывали размер, он определяется автоматически по количеству элементов списка и изменяется динамически (то есть во время работы программы) при добавлении или удалении элементов. Кстати, у массивов для получения длины было такое свойство, как length. В ArrayList тоже есть нечто подобное, но это уже не свойство length, а метод size(), поэтому пишется с круглыми скобками в конце. Соответственно, если мы для нашего списка напишем

то получим в консоли 4, поскольку мы добавили 4 города в список.

Как добавить элемент в конец списка мы разобрались.

А что, если нам нужно добавить элемент в середину списка?

Допустим, сейчас в нашем списке 3 города: Chicago, New York и Toronto. Мы хотим добавить Paris после Chicago и перед New York.

При работе с массивами, кроме того, что нам пришлось бы создать второй массив, который был бы на 1 элемент больше, чем исходный, нам бы пришлось при перенесении элементов во второй массив циклом на каждой итерации проверять, какой сейчас город, чтобы в случае Chicago вставить после него Paris. Получился бы достаточно большой код.

В ArrayList для вставки элемента в середину списка существует второй вариант метода add – add(int index, T element). Как видите, в этом варианте метод имеет 2 параметра: первый – индекс, под которым будет размещен новый элемент, а вторым параметром задается собственно сам элемент. Все элементы, которые находятся после нового индекса, автоматически сдвинутся. В нашем случае мы бы получили следующий код:

А как бы мы добавили элемент в начало списка? Вот так:

Ну что же, мы теперь знаем, как добавить элемент в любое место ArrayList.

А как же получить элемент под определенным индексом, например, под индексом 2?

В массиве мы бы просто использовали квадратные скобки. Например:

Для ArrayList использовать квадратные скобки не получится. Зато в ArrayList есть для этого специальный метод, который называется get(int index). Как видите, метод принимает в качестве параметра индекс элемента, который хотим получить. То есть в нашем случае:

Как получить элемент под определенным индексом теперь понятно.

А как узнать индекс определенного элемента?

Для этих целей тоже есть отдельный метод, который называется indexOf(Object o). То есть мы передаем методу обьект, который мы хотим найти в списке, а он нам возвращает индекс элемента, если такой есть, либо же значение «-1», если такого нет. Например:

Таким образом с помощью метода indexOf можно узнать, есть ли такой элемент в списке. Кроме этого, для этих целей существует отдельный метод contains(Object o), который:

  • возвращает true, если элемент хотя бы один раз встречается в списке;
  • возвращает false, если такого элемента нет.

Обратите внимание, что в ArrayList элементы могут повторяться (скажем, могут быть 2 города «New York»), и если вам нужно узнать не просто, есть ли такой элемент, а конкретное число вхождений, то вам придется пробегать весь массив и сравнивать каждый элемент с искомым, либо же воспользоваться сторонними классами.

Хорошо, а каким образом мы можем заменить один элемент на другой?

Скажем, в списке «Chicago, New York, Toronto» мы хотим заменить Toronto на Berlin. Для этого используется метод set(int index, T element):

  • int index - в этом параметре прописываем индекс элемента, значение которого мы хотим заменить;
  • T element - в этом параметре прописываем новое значение элемента.

Например:

А как удалить элементы из Arraylist?

Для этого существует метод remove() в двух вариациях:

  • remove(int index- мы передаем индекс элемента, который хотим удалить;
  • remove(Object o) - мы передаем сам элемент, который хотим удалить. Обратите внимание: если таких элементов несколько, то метод удалит только первый из них. Для удаления всех элементов сначала нужно опять же использовать цикл.

Пример:

Если же нам нужно удалить все элементы списка, мы можем использовать метод clear().

ПОДЫТОЖИМ

Когда же использовать обычные массивы, а когда ArrayList?

Массивы используются, когда:

  • заранее известно точное количество элементов
  • не будут добавляться/удаляться элементы

ArrayList используют во всех остальных случаях.

В данной статье мы рассмотрели самые распространенные методы. Если же Вас интересуют все методы ArrayList, – изучите официальную страничку документации от Oracle: https://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html


Также рекомендуем Вам прочитать еще одну статью, где тоже описывается ArrayList в Java: "List в Java"

 

Facebooktwittergoogle_plustumblrFacebooktwittergoogle_plustumblr

Facebooktwittergoogle_plustumblrFacebooktwittergoogle_plustumblr
Самоучители--узнать детальнее--