Maison  >  Article  >  Java  >  Comment convertir un tableau en liste en Java

Comment convertir un tableau en liste en Java

WBOY
WBOYavant
2023-04-19 09:13:042905parcourir

1. La méthode la plus courante (pas nécessairement la meilleure)

En utilisant la méthode Arrays.asList(strArray), après avoir converti le tableau en Liste, vous ne pouvez pas ajouter ou supprimer la Liste, vous pouvez seulement la vérifier et la modifier, sinon, une exception sera levée.

Code clé : List list = Arrays.asList(strArray);

private void testArrayCastToListError() {   String[] strArray = new String[2];   List list = Arrays.asList(strArray);   //对转换后的list插入一条数据   list.add("1");   System.out.println(list);  }

Résultat de l'exécution :

Exception in thread "main" java.lang.UnsupportedOperationException  at java.util.AbstractList.add(AbstractList.java:148)  at java.util.AbstractList.add(AbstractList.java:108)  at com.darwin.junit.Calculator.testArrayCastToList(Calculator.java:19)  at com.darwin.junit.Calculator.main(Calculator.java:44)

Le programme lève une exception à list.add("1") : UnsupportedOperationException.

Analyse des causes :

La valeur de retour de Arrays.asList(strArray) est une classe interne statique privée java.util.Arrays.ArrayList dans la classe java.util.Arrays, qui n'est pas la classe java.util.ArrayList. La classe java.util.Arrays.ArrayList a set(), get(), contain() et d'autres méthodes, mais n'a pas de méthodes add() ou remove(), donc l'appel de la méthode add() signalera une erreur.

Scénarios d'utilisation : La méthode Arrays.asList(strArray) ne peut être utilisée qu'après avoir converti un tableau en liste. Il n'est pas nécessaire d'y ajouter ou de supprimer des valeurs. Elle ne peut être utilisée que comme source de données à lire.

2. Une fois le tableau converti en liste, la méthode d'ajout, de suppression, de modification et de vérification est prise en charge

Convertissez la valeur de retour de Arrays.asList(strArray) de java.util.Arrays.ArrayList en java. util via le constructeur de ArrayList.

Code clé : ArrayList

private void testArrayCastToListRight() {   String[] strArray = new String[2];   ArrayList<String> list = new ArrayList<String>(Arrays.asList(strArray)) ;   list.add("1");   System.out.println(list);  }

Résultat de l'exécution : un élément "1" est ajouté avec succès.

[null, null, 1]

Scénario d'utilisation : après avoir converti le tableau en liste, vous devez ajouter, supprimer, modifier et interroger la liste. Cela peut être utilisé lorsque la quantité de données dans la liste n'est pas importante.

3. Grâce à la méthode Collections.addAll() de la classe d'outil de collection (la plus efficace)

Convertir via Collections.addAll(arrayList, strArray), créez une liste de même longueur en fonction de la longueur du tableau, puis utilisez la méthode Collections.addAll (), convertissez les éléments du tableau en binaire, puis ajoutez-les à la liste. C'est la méthode la plus efficace.

Code clé :

ArrayList< String> arrayList = new ArrayList<String>(strArray.length); Collections.addAll(arrayList, strArray);

Test :

private void testArrayCastToListEfficient(){   String[] strArray = new String[2];   ArrayList< String> arrayList = new ArrayList<String>(strArray.length);   Collections.addAll(arrayList, strArray);   arrayList.add("1");   System.out.println(arrayList);  }

Résultat de l'exécution : un élément « 1 » est également ajouté avec succès.

[null, null, 1]

Scénario d'utilisation : après avoir converti le tableau en liste, vous devez ajouter, supprimer, modifier et interroger la liste. Lorsque la quantité de données dans la liste est énorme, utilisez-la d'abord, ce qui peut améliorer la vitesse de fonctionnement.

Remarque : Vous trouverez ci-joint le code source de la méthode Collections.addAll() :

public static <T> boolean addAll(Collection<? super T> c, T... elements) {         boolean result = false;         for (T element : elements)             result |= c.add(element);//result和c.add(element)按位或运算,然后赋值给result         return result;     }

Question et réponse : Si le type de tableau est un tableau d'entiers, une erreur sera-t-elle signalée lors de sa conversion en liste ?

Réponse : Testé dans l'environnement JDK1.8, il n'y a aucun problème avec les trois méthodes de conversion. Utilisez en toute confiance. La méthode et les résultats des tests pour convertir un tableau d'entiers Integer[] en liste sont les suivants :

Méthode 1 : ne prend pas en charge les ajouts et les suppressions

Integer[] intArray1 = new Integer[2]; List<Integer> list1 = Arrays.asList(intArray1); System.out.println(list1);

Résultats d'exécution :

[null, null]

Méthode 2 : prend en charge les ajouts et les suppressions

Integer[] intArray2 = new Integer[2]; List<Integer> list2 = new ArrayList<Integer>(Arrays.asList(intArray2)) ; list2.add(2); System.out.println(list2);

Résultats d'exécution :

[null, null, 2]

Méthode 3 : prend en charge les ajouts et les suppressions, et est la plus efficace pour de grandes quantités de données

Integer[] intArray3 = new Integer[2]; List<Integer> list3 = new ArrayList<Integer>(intArray3.length); Collections.addAll(list3, intArray3); list3.add(3); System.out.println(list3);

Résultats d'exécution :

[null, null, 3]

En résumé, un tableau entier Integer[] à lister

Points faciles à commettre des erreurs : les erreurs possibles peuvent être les suivantes Converti :

int[] intArray1 = new int[2]; List<Integer> list1 = Arrays.asList(intArray1);//此处报错!!!

Cause de l'erreur : les types des deux côtés du signe égal sont incohérents et, bien sûr, la compilation échoue. Voir ci-dessous pour l’analyse.

Donc, lors de la déclaration d'un tableau, devez-vous utiliser int[] ou Integer[], quelle méthode de déclaration peut le convertir correctement en List ?

Réponse : vous ne pouvez utiliser Integer[] pour convertir List

La raison est analysée comme suit :

Nous regardons la définition de List dans le code source Java (n'ayez pas peur de ne pas comprendre le code source, regardez mon analyse, c'est très facile à comprendre) :

public interface List<E> extends Collection<E> {省略&hellip;}

Allons regardez la définition de Arrays.asList() dans le code source Java :

public static List asList(T... a) {     return new ArrayList<>(a); }
  • Comme le montre le code source ci-dessus, lors de la déclaration de List, un type générique doit être transmis

  • Qu'est-ce que un type de référence ? Integer est un type de référence, alors quel type est int est un type de données de base, pas un type de référence. C'est pourquoi il n'y a pas de liste en Java

  • Appliquez un exemple à d'autres cas : les 8 autres types de données de base byte, short, int, long, float, double et char ne sont pas des types de référence, donc les 8 données de base les types ne peuvent pas être utilisés comme forme de liste de ginseng. Mais String, array, class et interface sont des types référence et peuvent être utilisés comme paramètres formels de List, donc List existe

Avec les connaissances de base ci-dessus, voyons pourquoi la deuxième ligne des deux lignes de code suivantes peut être compilé et passé, et la troisième ligne mais l'erreur de compilation est signalée ?

int[] intArray1 = new int[1];  Arrays.asList(intArray1);//编译不报错 List<Integer> list1 = Arrays.asList( intArray1);//编译报错

Réponse :

  • La deuxième ligne de code, le paramètre d'entrée de la méthode Arrays.asList() est un type de référence int[], alors le type de valeur de retour doit être List

  • La troisième ligne Une erreur est signalée car les types des deux côtés du signe égal sont incohérents Le côté gauche : List

.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer