Comment utiliser les listes en Java
L'auteur a sélectionné Free and Open Source Fund pour recevoir un don dans le cadre du programme Write for DOnations.
Introduction
List est une interface intégrée du package Java java.util
. Comme les tableaux, les listes vous permettent de regrouper et de stocker plusieurs éléments dans une collection. Cependant, les listes sont plus puissantes et plus complexes, offrant des options de stockage avancées et récupérant des valeurs.
Une différence clé avec les tableaux est que vous ne pouvez stocker que des objets dans des listes. Ainsi, vous ne pouvez pas stocker un type primitif directement dans une liste, mais vous devez plutôt utiliser sa classe wrapper. Puisqu’une liste est une interface en Java, elle a différentes implémentations. Dans ce didacticiel, vous utiliserez la classe d'implémentation ArrayList
, qui fait également partie du package java.util
intégré. ArrayList
est couramment utilisé car il est rapide et léger. Néanmoins, les mêmes exemples de code et principes devraient fonctionner si vous choisissez une autre implémentation.
Les autres implémentations de l'interface List
sont :
LinkedList
est conçu différemment avec un coût d'initialisation plus élevé concernant les ressources mais plus optimal pour manipuler les données.Vector
est synchronisé, c'est-à-dire qu'il peut être utilisé en toute sécurité dans des programmes multithread. Cependant, la synchronisation a un coût en termes de performances sur chaque opération de manipulation des données, et c'est pourquoi elle ne doit être utilisée qu'en cas de besoin.
Conditions préalables
Pour suivre ce tutoriel, vous aurez besoin de :
-
Un environnement dans lequel vous pouvez exécuter des programmes Java à suivre avec les exemples. Pour configurer cela sur votre ordinateur local, vous aurez besoin des éléments suivants :
- Java (version 11 ou supérieure) installé sur votre machine, avec le compilateur fourni par le Java Development Kit (JDK). Pour Ubuntu et Debian, suivez les étapes de l'option 1 dans notre tutoriel Comment installer Java avec Apt sur Ubuntu 22.04. Pour les autres systèmes d'exploitation, notamment Mac et Windows, suivez les options de téléchargement pour l'installation de Java.
- Pour compiler et exécuter les exemples de code, ce didacticiel utilise Java Shell, qui est une boucle de lecture-évaluation-impression (REPL) exécutée à partir de la ligne de commande. Pour démarrer avec JShell, consultez le guide Introduction à JShell. Tous les exemples sont exécutés dans une seule session JShell pour éviter les instructions redondantes et utiliser les mêmes variables.
Familiarité avec Java et la programmation orientée objet, que vous pourrez retrouver dans notre tutoriel Comment écrire votre premier programme en Java.
Une compréhension des types de données Java est abordée dans notre didacticiel Comprendre les types de données en Java.
Création de listes
Pour créer une liste, vous devez la déclarer et initialiser son implémentation. Dans l'exemple suivant, vous allez créer une liste à l'aide de l'implémentation ArrayList
et contenant des objets String
. Ouvrez jshell
et tapez :
Info : Pour suivre l'exemple de code de ce didacticiel, ouvrez l'outil Java Shell sur votre système local en exécutant la commande jshell
. Ensuite, vous pouvez copier, coller ou modifier les exemples en les ajoutant après l'invite jshell>
et en appuyant sur ENTER
. Pour quitter jshell
, tapez /exit
.
List<String> pets = new ArrayList<>();
La ligne ci-dessus contient les parties importantes suivantes :
List
signifie que l'objet sera une liste. L'opérateur diamant<>
est utilisé pour spécifier que l'objet liste doit être créé avec un argument de typeString
. Spécifier le type d'arguments lors de la création d'une liste est une bonne pratique. Sinon, vous risquez d'essayer d'insérer un objet qui ne peut pas être converti, c'est-à-dire automatiquement converti, ce qui entraînerait une erreur.animaux
est le nom de la liste.new ArrayList<>()
signifie que vous créez un nouvel objet de typeArrayList
. Ici, vous pouvez spécifier à nouveau que la liste contiendra les objetsString
à l'intérieur de son opérateur diamant, mais ce n'est pas nécessaire car vous l'avez déjà spécifié une fois au début de la ligne.
Le résultat de la commande jshell
ci-dessus sera une confirmation qu'une liste d'animaux vide a été créée :
pets ==> []
Vous avez peut-être remarqué que lorsque vous avez créé la liste d’animaux, vous n’aviez pas besoin de préciser sa taille. La taille de la liste est prise en charge dynamiquement par Java, ce qui vous donne plus de flexibilité lorsque vous ne connaissez pas à l'avance le nombre d'éléments que vous allez stocker dans la liste.
Ajout d'éléments de liste
Une fois une liste créée, vous pouvez commencer à y ajouter des éléments. Vous disposez d'options pour ajouter un seul élément ou une collection d'éléments à la fois. De plus, chacune des deux options possède un paramètre facultatif pour spécifier à quelle position de la liste vous souhaitez commencer l'ajout. Voici quelques exemples.
L'opération de liste la plus simple consiste à ajouter un seul élément à vos animaux de compagnie
, disons un chien, comme ceci :
pets.add("Dog");
Lorsque vous exécutez ce qui précède dans jshell
, vous verrez le résultat suivant :
$4 ==> true
Vous pouvez ignorer $4
ici et tout au long du didacticiel car il s'agit d'une variable temporaire utilisée par jshell
. Ce qui compte, c'est true
qui est une confirmation que Dog
a été ajouté avec succès à votre liste. En revanche, si vous essayez d'ajouter un objet autre que String
, vous obtiendrez une erreur. Par exemple, essayez d'ajouter 1
à la liste comme ceci :
pets.add(1);
Vous verrez l'erreur suivante :
| Error:
| incompatible types: int cannot be converted to java.lang.String
| pets.add(1);
| ^
L'erreur est très claire. La liste des animaux de compagnie ne doit être utilisée que pour les objets String
et un 1
primitif ne peut pas être directement converti en String
. En raison de cette erreur, 1 n'est pas ajouté à la liste.
Ensuite, essayez d'ajouter un autre animal à votre animal et laissez-le avoir une valeur valide, comme un chat. Cependant, par souci de l’ego de votre chat, vous souhaiterez peut-être placer le chat avant le chien sur la liste. Pour ce faire, vous pouvez spécifier un paramètre pour l'index auquel le chat doit être ajouté comme ceci :
pets.add(0, "Cat");
Les indices de toutes les listes commencent à 0
. C'est pourquoi vous spécifiez 0
lorsque vous souhaitez qu'un élément soit ajouté en première position. Ainsi, votre chat sera le premier sur la liste de votre animal de compagnie.
Pour confirmer que votre chat est avant votre chien dans la liste, vous pouvez saisir le nom de la liste pets
dans jshell
et attendre le résultat suivant :
jshell> pets
pets ==> [Cat, Dog]
Vous pouvez également ajouter plusieurs entrées simultanément en utilisant la méthode addAll
. Cette méthode fonctionne de manière similaire à add
. Si vous transmettez un argument, il doit s'agir d'une collection telle que ArrayList
. Facultativement, vous pouvez transmettre deux arguments. Le premier doit alors être l'index auquel les éléments doivent être ajoutés ; le second doit contenir les nouvelles listes d'éléments. À titre d'exercice, ajoutez une nouvelle liste contenant plus d'animaux à la liste pets
à l'aide de la méthode addAll
.
Modification des éléments de la liste
Vous pouvez modifier un élément de liste en utilisant la méthode set
et en passant deux arguments. Le premier argument est l'index et le second est la valeur. Par exemple, pour restaurer le chien devant la liste, exécutez le code suivant :
pets.set(0, "Dog")
Lorsque vous définissez Dog
au début de la liste des animaux de compagnie, vous remplacez pratiquement la valeur Cat
précédente.
Votre liste contient maintenant deux chiens et vous souhaitez peut-être en supprimer un. Cela peut être fait avec la méthode remove
comme ceci :
pets.remove("Dog")
Lorsque vous exécutez le code ci-dessus dans jshell
, vous verrez une sortie telle que :
$9 ==> true
L'instruction true
confirme que votre opération a réussi, c'est-à-dire qu'il y a eu une valeur Dog
et qu'elle a été supprimée. Si vous essayez de supprimer un chat de la liste, vous ne recevrez pas une telle confirmation. Au lieu de cela, vous verrez false
imprimé car aucun élément de ce type n'a été trouvé, ni supprimé.
Enfin, si vous souhaitez supprimer tous les éléments de la liste, vous pouvez le faire en utilisant la méthode clear
comme ceci :
pets.clear()
Après avoir terminé l'exécution ci-dessus, votre liste d'animaux sera vide et vous pourrez recommencer à ajouter des éléments à partir de l'index 0.
Utilisation de méthodes de liste supplémentaires
Jusqu'à présent, vous avez déjà utilisé certaines des méthodes de liste les plus populaires telles que add(),
set()
et remove().
En plus de celles mentionnées, l'interface List
comprend plusieurs autres méthodes utiles qui peuvent améliorer l'efficacité et la précision de votre code. Voici quelques-uns des plus significatifs :
Méthode égal
La méthode equals
compare deux listes pour déterminer leur égalité. Pour que les listes soient égales, elles doivent être du même type, de la même taille et des éléments correspondants. À titre d'exemple, créez deux listes d'animaux de compagnie - actuels et souhaités :
List<String> currentPets = new ArrayList<>();
List<String> desiredPets = new ArrayList<>();
Ajoutez un élément dog aux deux listes comme ceci :
currentPets.add("Dog");
desiredPets.add("Dog");
Vous pouvez maintenant les comparer :
currentPets.equals(desiredPets)
Vous obtiendrez une réponse true
confirmant que les deux listes sont égales. Essayez cependant d'ajouter un nouvel élément, comme un serpent, aux animaux de compagnie souhaités :
desiredPets.add("Snake")
Après cela, comparez à nouveau les deux listes :
currentPets.equals(desiredPets)
Cette fois, vous obtiendrez une réponse false
car les deux listes ne sont pas égales.
Méthode contient
Vous pouvez rechercher dans une liste une valeur spécifique avec la méthode contains
. Par exemple, pour vérifier si la liste desiredPets
contient un serpent, vous pouvez écrire :
desiredPets.contains("Snake")
Le résultat de la commande ci-dessus affichera true
, confirmant ainsi qu'il y a un serpent dans la liste d'animaux souhaités.
Méthode indexOf
Vous pouvez utiliser la méthode indexOf
pour trouver la position d'un élément dans la liste. Par exemple, pour connaître la position du chien dans la liste des animaux, vous pouvez exécuter :
pets.indexOf("Dog")
La sortie affichera une variable temporaire pointant vers la position de l'élément :
$31 ==> 0
La sortie indique que la valeur de Dog
a un index de 0, ce qui en fait le premier élément de la liste. Ces informations peuvent être utiles si vous devez utiliser ou remplacer cette valeur.
Méthode toString
La méthode toString
vous permet de récupérer tous les éléments d'une liste sous la forme d'un seul String
, c'est-à-dire du texte brut. Ceci est très utile à des fins de débogage ou de journalisation. Pour voir comment cela fonctionne, utilisez la méthode System.out.println
pour imprimer la sortie sur la console et exécutez dans jshell
la commande suivante :
System.out.println(pets.toString())
Cela imprimera joliment chacun de vos animaux au format suivant :
[Dog, Fox]
Notez que les animaux peuvent différer selon ceux que vous avez ajoutés.
Méthode forEach
La méthode foreach
permet de parcourir tous les éléments de la liste et d'exécuter une action avec chacun d'eux. Cette méthode est une alternative à l’écriture de votre propre boucle foreach. La méthode foreach
accepte un objet Consumer
comme argument. Les consommateurs seront abordés dans un didacticiel ultérieur, et un bon exemple nécessitera des explications supplémentaires en dehors du cadre actuel. Néanmoins, si vous êtes curieux, essayez de concevoir votre exemple pour la méthode foreach
.
Conclusion
Dans ce didacticiel, vous avez appris à utiliser des listes Java et, plus spécifiquement, l'implémentation de ArrayList
. Vous avez créé une liste, visualisé ses éléments et l'avez vidée. Vous avez également appris les meilleures pratiques et méthodes utiles pour travailler avec des listes.
Pour en savoir plus sur Java, consultez notre série Comment coder en Java.