Dans cette série d'articles, je compare différentes façons de coder la même fonctionnalité. Le dernier message comparait Collections.singletonList et ArrayList pour créer une liste à un seul élément.
Dans cet article, je comparerai Collections.singletonList avec une autre méthode d'usine bien connue, List.of.
public statique
public static void main(String[] args) { final var addresses = Collections.singletonList( new Address( "742 Evergreen Terrace", "Springfield", "New York", "13468", "US" )); System.out.println(addresses); }
Cette méthode renvoie une liste immuable contenant uniquement l'objet spécifié. Il a été introduit dans Java 1.3. Les avantages par rapport à ArrayList ont été abordés dans le dernier post, mais pour récapituler :
statique
public static void main(String[] args) { final var addresses2 = List.of( new Address( "1007 Mountain Drive", "Bristol Township", "New Jersey", null, "US" )); System.out.println(addresses2); }
La méthode List.of(E e) est également une méthode Factory qui renvoie une liste non modifiable. Contrairement à Collections.singletonList(E e), qui ne prend en charge qu'un seul élément, List.of prend en charge 0 à 10 éléments, ainsi que des tableaux comportant plusieurs éléments. Il a été introduit dans Java 9, 17 ans après singletonList.
Il est intéressant de noter que, contrairement à SingletonList, qui a le commentaire :
Renvoie une liste immuable contenant uniquement l'objet spécifié.
l'Array.of indique qu'il s'agit d'une Liste non modifiable :
Renvoie une liste non modifiable contenant un élément.
Cela reflète une nouvelle compréhension de l’immuabilité des collections. D'après cette documentation :
Une collection est considérée comme non modifiable si des éléments ne peuvent pas être ajoutés, supprimés ou remplacés. Cependant, une collection non modifiable n'est immuable que si les éléments contenus dans la collection sont immuables.
Malgré ces différences de terminologie, les deux méthodes d'usine ont presque les mêmes fonctionnalités. En regardant plus profondément dans la UnmodifiableList, nous pouvons trouver :
static <E> List<E> of(E e1) { return new ImmutableCollections.List12<>(e1); }
Quelle surprise, ils ont choisi le terme pas si précis Immuable, cependant !
static final class List12<E> extends AbstractImmutableList<E> implements Serializable { @Stable private final E e0; @Stable private final E e1; List12(E e0) { this.e0 = Objects.requireNonNull(e0); this.e1 = null; } ... }
static abstract class AbstractImmutableList<E> extends AbstractImmutableCollection<E> implements List<E>, RandomAccess { // all mutating methods throw UnsupportedOperationException @Override public void add(int index, E element) { throw uoe(); } @Override public boolean addAll(int index, Collection<? extends E> c) { throw uoe(); } @Override public E remove(int index) { throw uoe(); } @Override public void replaceAll(UnaryOperator<E> operator) { throw uoe(); } @Override public E set(int index, E element) { throw uoe(); } @Override public void sort(Comparator<? super E> c) { throw uoe(); }
La seule différence est que List12 a deux champs pour potentiellement deux éléments, ce qui entraîne également une empreinte mémoire négligeable à moins de traiter des objets volumineux.
Cette fois, nous avons comparé les méthodes d'usine Collections.singletonList et List.of pour créer une liste à un seul élément. Nous avons discuté de la sémantique de immuable et non modifiable et avons montré que les deux méthodes sont efficaces, concises et légères en ressources. Si vous pouvez utiliser une version Java plus récente, c'est préférable pour sa familiarité, sa clarté et parce que nous utilisons l'interface List bien plus que les collections. S'il est limité à une ancienne version de Java, Collections.singletonList reste un choix solide.
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!