Les tableaux de.asList() vs Collections.singletonList()
Est-il un avantage (ou beaucoup de différence) à l'aide de Tableaux.asList(quelque chose) au fil des Collections.singletonList(quelque chose) pour créer une liste contenant un seul élément? Celui-ci rend la liste retournée immuable ainsi.
- Vous pouvez jeter la Goyave est
ImmutableList.of()
etLists.newArrayList()
dans le mélange ainsi. - Comme un côté de cela, j'ai eu Collections.singletonList() a causé des problèmes lors de la méthode renvoie une Liste qui est par la suite modifiée en aval.
- Java 10 a vrai immuable liste : stackoverflow.com/a/52536126/1216775
Vous devez vous connecter pour publier un commentaire.
Collections.singletonList(something)
est immuable alors queArrays.asList(something)
est une taille fixeList
représentation d'un Tableau où la Liste et le Tableau devient rejoint dans le tas.Arrays.asList(something)
permet non-changements structurels faites pour elle, qui se reflète à la fois la Liste et le conjoint de tableau. Il jetteUnsupportedOperationException
pour l'ajout, la suppression des éléments bien que vous pouvez définir un élément à un indice particulier.Toutes les modifications apportées à la Liste renvoyée par
Collections.singletonList(something)
entraîneraUnsupportedOperationException
.Aussi, la capacité de la Liste retournée par
Collections.singletonList(something)
sera toujours 1 contrairement àArrays.asList(something)
dont la capacité sera de la taille de la sauvegarde de tableau.Je voudrais juste ajouter que le singletonlist n'est pas soutenu par un tableau et vient d'une référence à un élément. Sans doute, il faudrait moins de mémoire et peuvent être importants en fonction du nombre de listes que vous voulez créer.
La méthode
Arrays.asList
renvoie une taille fixe la liste soutenue par le tableau spécifié. La méthode retourne une instance deArrayList
qui est un privé imbriquée statique de la classe l'extension deAbstractList
et pasjava.util.ArrayList
. Cette classe statique permettant la mise en œuvre de quelques méthodes par exempleset, indexOf, forEach, replaceAll
etc. mais lorsque nous invoquonsadd
il n'a pas de mise en œuvre de son propre, au lieu de la méthode deAbstractList
est appelé qui jettejava.lang.UnsupportedOperationException
.La
Collections.singletonList
retourne un liste immuable contenant uniquement de l'objet spécifié et il est sérialisable ainsi.Sur une note de côté, pour immuable listes nous utilisons généralement
Collections.unmodifiableList
qui retourne un inmodifiable vue de la liste spécifiée.Un inmodifiable voir la collection est une collection qui est inmodifiable et est également une vue sur un support de collecte. Notez que les modifications apportées à la sauvegarde de la collection pourrait être encore possible, et s'ils se produisent, ils sont visibles à travers la inmodifiable vue.
Nous pouvons avoir une véritable liste immuable dans Java 10 et plus tard. Il y a deux façons d'obtenir vraiment inmodifiable liste:
var unmodifiableList = List.copyOf(srcList);
=> imprimés Applevar unmodifiableList = srcList.stream().collect(Collectors.toUnmodifiableList());
=> imprimés AppleComme par doc de Java 10: