Beaucoup de débutants confondent le concept de la méthode Arrays.asList() avec la structure de données ArrayList. Même s'ils peuvent sembler et sembler similaires, ces deux sont totalement différents en ce qui concerne la mise en œuvre. Dans cet article, nous couvrirons l'utilisation de base de la méthode Arrays.asList() et éliminerons certaines confusions qui y sont liées.
Pourquoi Arrays.asList() est-il utilisé ?
Si vous avez un tableau que vous devez transformer en liste, java.util.Arrays fournit un wrapper Arrays.asList() à cette fin. En termes simples, cette méthode prend un tableau en paramètre et renvoie une liste. Les principales parties de l'API de la plate-forme Java ont été développées avant l'introduction de l'infrastructure des collections. Ainsi, occasionnellement, vous devrez peut-être effectuer une traduction entre les tableaux traditionnels et les collections plus modernes. Cette fonction sert de lien entre les collections et les API basées sur les tableaux.
Exemple
Jetez un œil à l'exemple suivant :
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
public class ArraysAsListDemo {
public static void main(String[] args) {
String[] teamMembers = {"Amanda", "Loren", "Keith"};
// using aslist() method
List teamList = Arrays.asList(teamMembers);
System.out.println("List : " + teamList);
HashSet teamHashSet = new HashSet<>(Arrays.asList(teamMembers));
System.out.println("HashSet : " + teamHashSet);
}
}
Sortir:
List : [Amanda, Loren, Keith]
HashSet : [Keith, Loren, Amanda] // HashSet ne maintient pas l'ordre
En quoi Arrays.asList() et ArrayList sont-ils différents ?
Lorsque vous appelez la méthode Arrays.asList() sur un tableau, l'objet renvoyé n'est pas un ArrayList (une implémentation de tableau redimensionnable de l'interface List ). C'est un objet de vue avec les méthodes get() et set() qui accèdent au tableau sous-jacent. Toutes les méthodes qui modifieraient la taille du tableau, telles que add() ou remove() de l'itérateur associé, lèvent une UnsupportedOperationException . La raison pour laquelle le programme Java se compile avec succès mais donne une exception d'exécution est que, apparemment, une "Liste" est renvoyée à la suite deTableaux.asList() . Où toutes les opérations d'ajout/suppression sont autorisées. Mais puisque la structure de données sous-jacente est un "tableau" non redimensionnable , une exception est donc levée au moment de l'exécution. Voici un extrait montrant à quoi cela ressemble :
import java.util.Arrays;
import java.util.List;
public class ArraysAsListDemo {
public static void main(String[] args) {
Integer[] diceRoll = new Integer[6];
//using aslist() method
List diceRollList = Arrays.asList(diceRoll);
System.out.println(diceRollList);
// using getters and setters to randomly access the list
diceRollList.set(5, 6);
diceRollList.set(0, 1);
System.out.println(diceRollList.get(5));
System.out.println(diceRollList.get(1));
System.out.println(diceRollList);
diceRollList.add(7); // Add a new Integer to the list
}
}
Sortir:
[null, null, null, null, null, null]
6
null
[1, null, null, null, null, 6]
Exception dans le thread "main" java.lang.UnsupportedOperationException
à java.util.AbstractList.add(AbstractList. java:148)
à java.util.AbstractList.add(AbstractList.java:108)
à ArraysAsListDemo.main(ArraysAsListDemo.java:20)
Exemples d'utilisation de la méthode asList()
Depuis Java SE 5.0, la méthode asList() est déclarée avoir un nombre variable d'arguments. Au lieu de passer un tableau, vous pouvez également passer des éléments individuels. Par exemple:
import java.util.Arrays;
import java.util.List;
public class ArraysAsListDemo {
public static void main(String[] args) {
List seasons = Arrays.asList("winter", "summer", "spring", "fall");
List odds = Arrays.asList(1, 3, 5, 7, 9);
System.out.println(seasons);
System.out.println(odds);
}
}
Sortir:
[hiver, été, printemps, automne]
[1, 3, 5, 7, 9]
GO TO FULL VERSION