1. ArrayListclasse

Aujourd'hui, nous allons explorer la ArrayListclasse. Il s'agit de la première de plusieurs classes connues sous le nom de collections . En Java, les collections sont un sujet tellement vaste et utile qu'une quête CodeGym entière leur est consacrée.

Pour bien comprendre comment les collections sont structurées et toutes leurs nuances, vous devez d'abord apprendre la POO, les interfaces, l'héritage, les bases du multithreading, et bien plus encore.

Aujourd'hui, nous allons donc nous familiariser avec le type de collection le plus simple. Mais à un niveau suffisamment profond pour que vous compreniez comment l'utiliser et comment cela fonctionne. Maintenant, rencontrez la ArrayListcollection .

La trame de fond

Je vais commencer par un peu de contexte. Les programmeurs n'aimaient vraiment pas un aspect des tableaux : le fait que leur taille ne peut pas être modifiée. Que faire si vous avez besoin de stocker trois éléments supplémentaires dans un tableau, mais qu'il n'y a qu'une seule cellule vide ?

La seule solution aux limitations d'espace d'un tableau était de créer un très grand tableau afin d'accueillir tous les éléments que vous pourriez avoir besoin de stocker. Mais c'était généralement une perte de mémoire. Si un tableau contenait généralement deux ou trois éléments mais qu'il y avait même une infime chance qu'il ait besoin d'en stocker 100, alors il était nécessaire de créer un tableau avec la capacité d'en stocker 100.

Alors qu'est-ce que les programmeurs ont trouvé? Ils ont écrit la ArrayListclasse, qui faisait le même travail que la Arrayclasse, mais était redimensionnable.

Classe ArrayListArrayList class

Le nom de la ArrayListclasse est formé de deux mots : Array + List. Arrayest un tableau et Listest une liste.

Chaque ArrayListobjet contient un tableau ordinaire d'éléments. Lorsque vous lisez des éléments à partir d'un ArrayList, l'objet les récupère à partir de son tableau interne. Lorsque vous écrivez des éléments, il les écrit dans le tableau interne.

La classe ArrayList n'a pas tous les inconvénients des tableaux. Il sait comment :

  • Stocker des éléments d'un type spécifique
  • Redimensionner dynamiquement la liste
  • Ajouter des éléments à la fin de la liste
  • Insérer des éléments au début ou au milieu de la liste
  • Supprimer des éléments de n'importe où dans la liste

Pour plus de détails, voir ci-dessous:


2. Créer un ArrayListobjet

Pour créer un ArrayListobjet, vous devez écrire un code comme celui-ci :

ArrayList<TypeParameter> name = new ArrayList<TypeParameter>();

ArrayListest le type/classe de la collection, TypeParameterest le type des éléments stockés dans la ArrayListcollection et nameest le nom d'une ArrayList<TypeParameter>variable.

La namevariable a un type générique. Il se compose de deux types : le type de la collection est indiqué en premier, puis des crochets pointus sont utilisés pour indiquer le type des éléments stockés dans la collection.

Exemples:

Code Description
ArrayList<Integer> list = new ArrayList<Integer>();
Liste d'entiers
ArrayList<String> list = new ArrayList<String>();
Liste des chaînes
ArrayList<Double> list = new ArrayList<Double>();
Liste des nombres réels

Contrairement aux tableaux, les collections ne peuvent pas stocker de types primitifs, uniquement des types de référence . Donc, si vous avez besoin d'une collection de ints, utilisez Integerplutôt la classe wrapper.


3. Opérations avec unArrayList

Initialement, la longueur de la liste nouvellement créée est nulle, puisqu'elle contient 0 éléments. Si vous ajoutez un élément à la liste, sa longueur augmente de 1. Si vous supprimez l'élément ajouté, la longueur redescend à zéro.

Le tableau suivant peut vous en apprendre plus sur les méthodes de la ArrayListclasse :

Méthodes Description
void add(Type value)
Ajoute l'élément passé à la liste
void add(int index, Type value)
Ajoute un élément à un emplacement spécifique dans la liste.
Type get(int index)
Renvoie l'élément dont l'index estindex
void set(int index, Type value)
Affecte valueà l'élément dont l'index estindex
Type remove(int index)
Supprime l'élément dont l'index est index. Renvoie l'élément supprimé.
Type remove(Type value)
Supprime l'élément que vous transmettez à la méthode. S'il existe plusieurs éléments de ce type, le premier sera supprimé.
void clear()
Efface la liste, c'est-à-dire supprime tous les éléments de la liste.
boolean contains(Type value)
Vérifie si la liste contient value.
boolean isEmpty()
Vérifie si la liste est vide ou non. En d'autres termes, si la longueur de la liste est nulle.
int size()
Renvoie la taille de la liste, c'est-à-dire le nombre d'éléments dans la liste.
Type[] toArray(Type[] array)
Retourne un tableau contenant les éléments de la liste.
Vous devez passer le tableau à la méthode.

Ces méthodes vous permettent de faire presque tout ce que vous voulez avec la liste : échanger des éléments, ajouter des éléments et supprimer des éléments. Vous pouvez effacer la liste avec une seule commande, ou même convertir la liste en tableau.



4. Comparaison de ArrayListetArray

Je ne pense pas que nous puissions éviter de comparer ArrayListet un tableau.

Il n'y a que 4 actions que vous pouvez effectuer avec les tableaux :

  • Créer un tableau
  • Obtenir un élément par index
  • Définir un élément par index
  • Obtenir la longueur du tableau

Voici ces opérations telles qu'elles s'appliquent à un tableau et à un ArrayList:

Déployer Liste des tableaux
String[] array = new String[10];
ArrayList<String> list = new  ArrayList<String>();
String s = array[0];
String s = list.get(0);
array[0] = "Bye";
list.set(0, "Bye");
int count = array.length;
int count = list.size();

Comparons le ArrayListfonctionnement d'un et le fonctionnement d'un tableau. Par exemple, implémentons cette tâche : "lisez 10 chaînes à partir du clavier et affichez-les à l'écran dans l'ordre inverse"

Utiliser le tableau Utilisation de ArrayList
Scanner console = new Scanner(System.in);

// Read strings from the keyboard
String[] list = new String[10];

for (int i = 0; i < list.length; i++)
{
    String s = console.nextLine();
    list[i] = s;
}

// Display the contents of the array on the screen
for (int i = 0; i < list.length; i++)
{
    int j = list.length - i - 1;
    System.out.println(list[j]);
}
Scanner console = new Scanner(System.in);

// Read strings from the keyboard
ArrayList<String> list = new ArrayList<String>();

for (int i = 0; i < 10; i++)
{
    String s = console.nextLine();
    list.add(s);
}

// Display the contents of the collection on the screen
for (int i = 0; i < list.size(); i++)
{
    int j = list.size() - i - 1;
    System.out.println(list.get(j));
}

L'analogie est claire. Tout est en quelque sorte plus court et plus clair pour les tableaux. Mais ArrayListce n'est pas difficile non plus : pour obtenir un élément, on utilise la get()méthode ; pour changer un élément, la set()méthode ; pour obtenir la longueur de la liste, la size()méthode.

Alors pourquoi les programmeurs utilisent-ils la ArrayListclasse ?

Le tout, bien sûr, ce sont toutes les autres méthodes que les tableaux ordinaires n'ont pas :

  • Ajouter un élément à la liste
  • Ajouter un élément au milieu de la liste
  • Rechercher un élément dans la liste
  • Supprimer un élément d'une liste