[JAVA] Piège de la classe asList of Arrays

introduction

J'utilise beaucoup Arrays ces derniers temps, et j'y suis accro. Je vais l'écrire sous forme de mémo.

Pour faire un tableau

Lors de l'utilisation d'un tableau en Java, il existe les deux méthodes suivantes. Comment générer en utilisant new et comment générer en utilisant la classe asList of Arrays.

Les deux peuvent créer un tableau de chaînes avec "test1" et "test2".

Essayez de manipuler le tableau

Maintenant que nous avons créé le tableau, ajoutons / éditons / supprimons-le. Le code de test ressemble à ceci

sample.java: cas utilisant des tableaux


@Test
public void test_sample() {

    List<String> test = Arrays.<String>asList("aaa", "bbb");

    // 1.Ajouter un élément
    test.add("ccc");

    // 2.Supprimer l'élément
    test.remove(1);

    // 3.Modifier l'élément
    test.set(1, "ddd");

    // 4.Effacer tous les éléments
    test.clear();
}

Quand j'essaye de faire ça, sauf dans le cas 3 java.lang.UnsupportedOperationException se produira.

Mais qu'en est-il du cas avec nouveau?

sample2.java: cas utilisant new


@Test
public void test_sample2() {

    List<String> test = new ArrayList<>();
    test.add("aaa");
    test.add("bbb");

    // 1.Ajouter un élément
    test.add("ccc");

    // 2.Supprimer l'élément
    test.remove(1);

    // 3.Modifier l'élément
    test.set(1, "ddd");

    // 4.Effacer tous les éléments
    test.clear();
}

Dans ce cas, aucune erreur ne se produira même si elle est exécutée et le résultat sera le suivant.

Contenu du tableau après le cas 1: aaa, bbb, ccc Contenu de la séquence après le cas 2: aaa, ccc Contenu du tableau après le cas 3: aaa, ddd Contenu du tableau après le cas de 4: Vide

Pourquoi?

Pourquoi y a-t-il une différence lorsque les deux font simplement la même opération de tableau? L'utilisation de new générera dynamiquement un tableau, mais pour asList dans la classe Arrays

En effet, il renvoie une liste de tailles fixes **.

Il a également été mentionné dans les spécifications de l'API Java. Extrait de Class Arrays

Qualificateurs et types Description de la méthode
static <T> List<T> asList(T... a)
Lien vers le tableau spécifié
Renvoie une liste de tailles fixes

Qu'est-ce qu'une liste de taille fixe?

Lors de l'utilisation de new, l'objet de l'élément spécifié Produire. Par conséquent ** l'entité existe **.

Cependant, dans le cas de Arrays.asList, spécifié Comme une liste contenant le contenu d'un élément ** Je fais juste semblant d'être **, donc taille fixe (nombre fixe) Cela devient une liste de Si vous effectuez une opération numérique, vous obtiendrez une erreur UnsupportedOperationException comme décrit ci-dessus.

Résumé

La liste générée par Arrays.asList contrôle le nombre d'éléments Je ne pouvais pas le faire, j'ai donc utilisé une liste dynamique Ne convient pas au traitement (bien que je ne pense pas qu'il soit normalement utilisé)

Cependant, lorsque je veux le gérer comme un type de liste avec un nombre fixe d'éléments (qui ne peuvent pas être modifiés), je pense personnellement que c'est mieux car il n'alloue pas de mémoire imprudente que de l'ajouter à l'objet créé par new.

Recommended Posts

Piège de la classe asList of Arrays
Utilisation de la classe Date
[GCD] Principes de base de la classe DispatchQueue
Exemple d'utilisation d'une classe abstraite
[Java] Comparateur de la classe Collection
Résumé de la classe Java Math
Diverses méthodes de la classe Java String
Diverses méthodes de la classe String