Maison > Java > javaDidacticiel > le corps du texte

[Comparaison de codes] Collections.singletonList vs List.of

王林
Libérer: 2024-08-07 09:24:40
original
440 Les gens l'ont consulté

[Code Compare] Collections.singletonList vs List.of

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.

Collections : singletonList

Signature de la méthode

public statique Liste liste singleton(T o)

  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);
  }
Copier après la connexion

Description

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 :

  1. Implémentation en ligne : Initialiser avec l'élément souhaité sur une seule ligne.
  2. Immuabilité : La taille de la liste et le contenu de son élément unique ne peuvent pas être modifiés.
  3. Allocation de mémoire : La classe SingletonList ne contient qu'un seul champ pour un seul élément.
  4. Utilisation du processeur : Le constructeur SingletonList accepte l'élément unique comme paramètre, ne nécessitant aucun redimensionnement ni manipulation de tableau.

Liste ::de

Signature de la méthode

statique Liste de()

  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);
  }
Copier après la connexion

Description

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);
  }
Copier après la connexion

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;
        }
        ...
    }
Copier après la connexion
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(); }
Copier après la connexion

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.

Conclusion

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!

source:dev.to
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal