J'utilise beaucoup Arrays ces derniers temps, et j'y suis accro. Je vais l'écrire sous forme de mémo.
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.
new ArrayList<T>()
//Générer un tableau
List<String> hoge = new AraryList<String>();
//Ajouter un élément
hoge.add("test1");
hoge.add("test2");
Arrays.<T>asList()
//Générer un tableau
List<String> hoge = Arrays.<String>asList("test1", "test2");
Les deux peuvent créer un tableau de chaînes avec "test1" et "test2".
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 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 |
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.
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