Qu'est-ce que la classe ArrayList ?
ArrayList est une implémentation de tableau mutable de l'interface List, qui fait partie de Collection Framework, qui est responsable de la liste (ou du tableau dynamique) située dans le package java.utils. Cette classe implémente toutes les opérations de liste facultatives et fournit des méthodes pour contrôler la taille du tableau utilisé pour stocker la liste. ArrayList est basé sur l'idée d'un tableau dynamique. À savoir la possibilité d’ajouter et de supprimer des éléments, tout en augmentant ou en diminuant selon les besoins.Que stocke ArrayList ?
Uniquement les types de référence, tous les objets, y compris les classes tierces. Chaînes, flux de sortie, autres collections. Les classes Wrapper sont utilisées pour stocker les types de données primitifs.Constructeurs ArrayList
-
Liste des tableaux()
Constructeur vide avec capacité initiale du tableau interne = 10.
ArrayList<String> list = new ArrayList<>();
Il est conseillé d'indiquer le type de valeurs stockées entre crochets. Dans l'exemple ci-dessus -
String
. -
ArrayList (Collection <? extends E> c)
Le constructeur accepte une autre collection, créant un nouveau tableau avec les éléments de la collection passée :
ArrayList<String> list2 = new ArrayList<>(list);
L'ordre des éléments dans la nouvelle liste sera le même que celui d'origine.
-
ArrayList (int initialCapacity)
Le paramètre constructeur est la valeur de la taille initiale du tableau interne.
ArrayList<String> list2 = new ArrayList<>(10000);
Si l'ArrayList sous-jacent manque d'espace lorsque de nouveaux éléments sont ajoutés, un nouveau tableau plus grand est créé et les données y sont copiées. Si vous savez à l'avance lors de l'écriture de votre code qu'un grand nombre d'éléments seront traités dans le tableau, vous devez spécifier une valeur plus grande à des fins d'optimisation.
Méthodes ArrayList
-
ajouter(E e)
Ajoute un nouvel élément à la fin de la liste. Renvoie
boolean
-value ( true - succès, false - non ajouté) :ArrayList<String> list = new ArrayList<>(); list.add("Hello");
-
ajouter (index int, élément E)
Ajoute un élément
element
à l'index de position. Lors de l'ajout, tous les éléments à droite de l'index spécifié sont décalés d'une position vers la droite :list.add(0, "Amigo");
Très utile lorsque vous devez insérer un élément n'importe où dans une liste, mais pour les opérations d'insertion fréquentes au début et au milieu de ArrayList, ce n'est peut-être pas un très bon choix - vous devriez consulter LinkedList.
-
addAll (Collection <? extends E> collection)
Ajoute tous les éléments de la collection à une liste dans l'ordre dans lequel ils apparaissent dans la collection.
-
addAll (int index, Collection <? extends E> collection)
Ajout de tous les éléments
collection
à la liste à partir de indexindex
. Dans ce cas, tous les éléments seront décalés vers la droite du nombre d'éléments dans la listecollection
: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);
Conclusion:
Первое добавление: [Amigo, Hello] Второе добавление в середину: [Amigo, Amigo, Hello, Hello]
Les méthodes
addAll()
renvoient également le résultat booléen de l’ajout d’éléments. -
clair()
Suppression de tous les éléments de la liste.
- cloner()
Renvoie un objet copie du tableau :
ArrayList<String> copyOfSecondList = (ArrayList<String>) secondList.clone(); secondList.clear(); System.out.println(copyOfSecondList);
Conclusion:
[Amigo, Amigo, Hello, Hello]
Veuillez noter que la méthode
clone()
renvoieObject
, donc après l'avoir appelée, vous devrez effectuer un cast vers la classe requise.Le clonage crée un nouvel objet indépendant. L'exemple montre comment la purification d'un objet cloné n'a pas affecté la composition de son clone.
-
contient (Objet 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
. В результате метод возвращает элемент, который был удален. -
supprimer (Objet o)
La méthode supprime l'élément passé de la liste
o
. Si un élément est présent dans la liste, il est supprimé et tous les éléments sont décalés vers la gauche. Si l'élément existe dans la liste et est supprimé avec succès, la méthode renvoie true ; sinon, false . -
supprimerTout(Collection<?> c)
Si vous devez supprimer plusieurs éléments, vous ne devez pas le faire en boucle conditionnelle : il est beaucoup plus pratique et plus sûr d'utiliser la méthode
removeAll()
. Il accepte une collection d'éléments qui seront supprimés de la liste.La collection doit contenir des éléments du même type que celui stocké par la liste cible. Sinon il sera jeté
ClassCastException
. La méthode retournera true si la liste a été modifiée à la suite de l'appel de méthode. -
set (index int, élément E)
Remplace l'élément à la position spécifiée
index
par celui passéelement
. L'index doit également être supérieur à zéro et inférieur à l'index du dernier élément, sinon une exception sera levéeIndexOutOfBoundsException
. -
taille()
Le meilleur moyen (presque le seul) de connaître la taille d'un tableau.
-
trier(Comparateur<? super E> c)
Trier la liste selon une règle donnée. Une règle de tri est une interface implémentée
Comparator
avec une méthode remplacéecompareTo()
.La substitution est nécessaire si la collection contient des objets de sa propre classe. Lorsque vous travaillez avec des classes standard (
Integer
,String
et ainsi de suite), le remplacementcompareTo()
n'est requis que pour le tri non standard. -
versArray()
Convertit une liste en un tableau fixe. Notez que la méthode renvoie un tableau d'objets (
Exemple:Object[]
). Si vous devez convertir une liste en un tableau d'objets d'un certain type, vous pouvez transmettre un tableau dans lequel les éléments des listes seront déplacés en tant que paramètre de la méthode.String[] array = new String[secondList.size()]; secondList.toArray(array); for(int i = 0; i< array.length; i++) { System.out.println(array[i]); }
Conclusion:
Amigo Amigo Hello Hello
Vous trouverez ci-dessous les principales méthodes d’ArrayList.
Liens pour des lectures complémentaires
- Un article détaillé sur les tableaux dynamiques , ou plus précisément sur
ArrayList
etLinkedList
, qui remplissent leur rôle dans le langage Java. - Un article sur la suppression d'éléments d'un ArrayList .
- Conférence sur l'utilisation d'ArrayList dans des diagrammes et des images .
GO TO FULL VERSION