ArrayList クラスとは何ですか?
ArrayList は、コレクション フレームワークの一部である List インターフェイスの変更可能な配列実装であり、java.utils パッケージにあるリスト (または動的配列) を担当します。このクラスは、すべてのオプションのリスト操作を実装し、リストの格納に使用される配列のサイズを制御するメソッドを提供します。ArrayList は動的配列の考え方に基づいています。つまり、必要に応じて要素を追加または削除しながら、要素を増減できる機能です。ArrayList には何が保存されますか?
参照型、サードパーティ クラスを含む任意のオブジェクトのみ。文字列、出力ストリーム、その他のコレクション。ラッパー クラスは、プリミティブ データ型を格納するために使用されます。ArrayList コンストラクター
-
配列リスト()
初期内部配列容量 = 10 の空のコンストラクター。
ArrayList<String> list = new ArrayList<>();
保存される値の種類を山括弧で囲むことをお勧めします。上の例では -
String
。 -
ArrayList(コレクション <? extends E> c)
コンストラクターは別のコレクションを受け入れ、渡されたコレクションの要素を含む新しい配列を作成します。
ArrayList<String> list2 = new ArrayList<>(list);
新しいリスト内の要素の順序は元のリストと同じになります。
-
ArrayList(int 初期容量)
コンストラクター パラメーターは、内部配列の初期サイズの値です。
ArrayList<String> list2 = new ArrayList<>(10000);
新しい要素が追加されたときに基になる ArrayList のスペースが不足すると、より大きな新しい配列が作成され、データがそこにコピーされます。コードを作成するときに、配列内で多数の要素が処理されることが事前にわかっている場合は、最適化のためにより大きな値を指定する必要があります。
ArrayList メソッド
-
add(E e)
新しい要素をリストの最後に追加します。戻り
boolean
値 -value ( true - 成功、false - 追加されません):ArrayList<String> list = new ArrayList<>(); list.add("Hello");
-
add(int インデックス, E 要素)
element
位置インデックスに要素を追加します。追加すると、指定されたインデックスの右側にあるすべての要素が 1 位置右にシフトされます。list.add(0, "Amigo");
リスト内の任意の場所に要素を挿入する必要がある場合には非常に便利ですが、ArrayList の先頭と途中で頻繁に挿入操作を行う場合は、あまり良い選択ではない可能性があります。LinkedList を検討する必要があります。
-
addAll(コレクション <? extends E> コレクション)
コレクションのすべての要素を、コレクション内に表示される順序でリストに追加します。
-
addAll(int インデックス, コレクション <? extends E> コレクション)
Добавление всех элементов
collection
в список начиная с индексаindex
. При этом все элементы сдвинутся вправо на количество элементов в спискеcollection
:ArrayList<String> secondList = new ArrayList<>(); secondList.addAll(list); System.out.println("First addition: " + secondList); secondList.addAll(1, list); System.out.println("Second addition in the middle: " + secondList);
Вывод:
Первое добавление: [Amigo, Hello] Второе добавление в середину: [Amigo, Amigo, Hello, Hello]
Методы
addAll()
также возвращают boolean-результат добавления элементов. -
clear()
Удаление всех элементов из списка.
- clone()
returns an object-копию массива:
ArrayList<String> copyOfSecondList = (ArrayList<String>) secondList.clone(); secondList.clear(); System.out.println(copyOfSecondList);
Вывод:
[Amigo, Amigo, Hello, Hello]
Следует обратить внимание, что метод
clone()
возвращаетObject
, так что после его вызова потребуется сделать приведение к необходимому классу.При клонировании создается новый независимый an object. В примере показано, How очищение клонированного an object не сказалось на составе его клона.
-
contains(Object o)
Проверка наличие an object в списке, возвращает
boolean
-meaning.System.out.println(copyOfSecondList.contains("Hello")); System.out.println(copyOfSecondList.contains("Check"));
Вывод:
true false
-
ensureCapacity(int minCapacity)
Увеличивает размер внутреннего массива, чтобы в него поместилось количество элементов, переданных в
minCapacity
. Если массив достаточно вместителен, ниHowие преобразования не производятся.Этот метод полезен, когда возникает потребность вместить большое количество элементов в несколько итераций. Например, при создании списка емкость его внутреннего массива — 10. При загрузке данных по сети они обрабатываются асинхронно порциями и результаты помещаются в массив. Если ожидается доставка 10 000 элементов, может быть неэффективно просто добавлять эти данные каждый раз: достаточно будет в начале обработки вызвать метод
ensureCapaciry(10000)
и записывать туда данные по мере необходимости. -
forEach(Consumer<? super E> action)
Обработать в цикле ArrayList можно стандартными способами, цикл for:
// First way for(int i = 0; i< secondList.size(); i++) { System.out.println(secondList.get(i)); } И цикл for-each: // Second way for(String s : secondList) { System.out.println(s); }
В классе ArrayList есть метод для обработки каждого element, который называется также, forEach. В качестве аргумента передается реализация интерфейса Consumer, в котором нужно переопределить метод accept():
secondList.forEach(new Consumer<String>() { @Override public void accept(String s) { System.out.println(s); } });
Вывод:
Amigo Amigo Hello Hello
Метод accept принимает в качестве аргумента очередной элемент того типа, который хранит в себе ArrayList. Пример для Integer:
ArrayList<Integer> integerList = new ArrayList<>(); integerList.forEach(new Consumer<Integer>() { @Override public void accept(Integer integer) { System.out.println(integer); } });
Метод
action()
будет выполнен для каждого element. -
get(int index)
returns элемент, который расположен в указанной позиции списка.
Если
index < 0
orindex >=
максимального количества элементов списка, будет выброшено исключениеIndexOutOfBoundsException
.Это основной метод получения element из списка, время извлечения element по индексу всегда будет одинаковым, независимо от размера ArrayList.
-
indexOf(Object o)
Метод возвращает индекс первого вхождения element в списке. Если element не существует в списке, метод вернет -1.
-
isEmpty()
Метод возвращает true, если список пустой, false в обратном случае.
Если в списке содержатся только элементы
null
, метод вернет false. Иными словами,null
элементы также учитываются этим методом. -
iterator()
returns итератор для списка для последующего использования в цикле or при любой другой обработке.
Итератор для ArrayList — fail-fast. Это значит, что если коллекция изменится во время итерации, будет выброшено исключение ConcurrentModificationException. Подробнее об fail-fast и его противоположности fail-safe можно почитать здесь.
-
lastIndexOf(Object o)
Функционал метода похож на
indexOf()
, отличие в том, что возвращается индекс последнего element в списке.Если элемент не найден, также возвращает -1.
-
remove(int index)
Удаление element в указанной позиции индекса. После удаления сдвигает все элементы влево для заполнения освободившегося пространства.
Если
index<0
or>=
количество элементов списка, будет выброшено исключениеIndexOutOfBoundsException
. В результате метод возвращает элемент, который был удален. -
remove(Object o)
Метод удаляет из списка переданный элемент
o
. Если элемент присутствует в списке, он удаляется, а все элементы смещаются влево. Если элемент существует в списке и успешно удален, метод возвращает true, в обратном случае — false. -
removeAll(Collection<?> c)
Если необходимо удалить несколько элементов, не стоит делать это в цикле по условию: гораздо удобнее и безопаснее воспользоваться методом
removeAll()
. Он принимает коллекцию элементов, которая будет удалена из списка.Коллекция должна содержать элементы того же типа, которые хранит целевой список. В обратном случае будет выброшен
ClassCastException
. Метод вернет true, если список был изменен в результате вызова метода. -
set(int index, E element)
Замена element в указанной позиции
index
на переданныйelement
. Индекс также должен быть больше нуля и меньше индекса последнего element, иначе будет выброшено исключениеIndexOutOfBoundsException
. -
size()
Лучший способ (практически единственный) для того, чтобы узнать размер массива.
-
sort(Comparator<? super E> c)
Сортировка списка по заданному правилу. Правило сортировки представляет собой реализованный интерфейс
Comparator
с переопределенным методомcompareTo()
.Переопределение нужно, если коллекция содержит an objectы собственного класса. При работе со стандартными классами (
Integer
,String
и так далее) переопределениеcompareTo()
требуется только для нестандартной сортировки. -
toArray()
Превращает список в фиксированный массив. Обратите внимание, что метод возвращает массив an objectов (
Пример:Object[]
). Если необходимо привести список в массив an objectов определенного типа, в качестве параметра в метод можно передать массив, куда будут перемещены элементы списков.String[] array = new String[secondList.size()]; secondList.toArray(array); for(int i = 0; i< array.length; i++) { System.out.println(array[i]); }
Вывод:
Amigo Amigo Hello Hello
ArrayList の主なメソッドを以下に示します。
さらに読むためのリンク
- 動的配列、より正確には
ArrayList
JavaLinkedList
言語で役割を実行する とに関する詳細な記事。 - ArrayList からの要素の削除に関する記事。
- ArrayList の操作方法を図と写真でレクチャーします。
GO TO FULL VERSION