Conjunto inmutable en Java

  • Como sugiere el nombre, estos conjuntos son inmutables.
  • Si se intenta agregar, eliminar y actualizar elementos en el conjunto, tendremos UnsupportedOperationException.
  • Un ImmutableSet tampoco permite elementos nulos.
  • Si se intenta crear un ImmutableSet con un elemento nulo, tendremos NullPointerException. Si se intenta agregar un elemento nulo en el conjunto, tendremos UnsupportedOperationException.
  • Una ventaja de cualquier colección inmutable (Conjunto, Mapa, Lista) es la seguridad de subprocesos. Estos se enhebran automáticamente, ya que son inmutables.
  • Tenga en cuenta que es una colección inmutable, no una colección de objetos inmutables, por lo que los objetos que contiene pueden modificarse.

Creando un ImmutableSet en Java

  • Usando el método copyOf() en Guava Usamos un Set existente para crear un ImmutableSet.

    // Creating an immutable set using copyOf()
    import java.util.*;
    import com.google.common.collect.ImmutableSet;
    import java.io.*;
      
    class GfG
    {
        public static void main(String args[])
        {
            // creating empty set
            Set<String> s = new HashSet<String>();
            s.add("GeeksforGeeks");
            s.add("Practice");
              
            // An immutable copy of s
            Set<String> is  = ImmutableSet.copyOf(s);
                
            System.out.println(is);
        }
    }

    Producción :

    [GeeksforGeeks, Practice]
  • Usando el método Of() en Guayaba

    // Java code illustrating of() method to
    // create a ImmutableSet
    import java.util.*;
    import com.google.common.collect.ImmutableSet;
      
    class GfG
    {
        public static void main(String args[])
        {          
            // non-empty immutable set
            ImmutableSet<String> is = 
                     ImmutableSet.of("ide", "code");
                
            // Lets try adding element in these set
            System.out.println(is);             
        }
    }

    Producción :

    [ide, code]
  • Uso del método Java 9 Factory Of()
    En Java, si usamos of con Set, Map o List, se crea un conjunto inmutable.

    // Java code illustrating of() method to
    // create a ImmutableSet
    import java.util.*;
    import com.google.common.collect.ImmutableSet;
      
    class GfG
    {
        public static void main(String args[])
        {          
            // non-empty immutable set
            Set<String> is = Set.of("ide", "code");
                
            // Let's print the set
            System.out.println(is);             
        }
    }

    Producción :

    [ide, code]

¿Qué pasa si tratamos de cambiar un ImmutableSet?
Lanza UnsupportedOperationException

// Java code illustrating of() method
import java.util.*;
  
class GfG
{
    public static void main(String args[])
    {
        // empty immutable set
        Set<String> is1 = Set.of();
            
        // non-empty immutable set
        Set is2 = Set.of("ide", "contribute", "support");
            
        // Lets try adding element in these set
        is1.add(null);
        is2.add("set");             
    }
}

Producción :

Exception in thread "main" java.lang.UnsupportedOperationException
    at com.google.common.collect.ImmutableCollection.add(ImmutableCollection.java:218)
    at ImmutableListDemo.main(Main.java:16)

¿En qué se diferencia de Collections.unmodifiableSet()?
Collections.unmodifiableSet crea un contenedor alrededor del mismo conjunto existente de modo que el contenedor no se puede usar para modificarlo. Sin embargo, aún podemos cambiar el conjunto original.

// Java program to demonstrate that a set created using
// Collections.unmodifiableSet() can be modified indirectly.
import java.io.*;
import java.util.*;
  
class GFG {
public
    static void main(String[] args)
    {
        Set<String> s = new HashSet<String>();
        s.add("Geeks");
        Set<String> us = Collections.unmodifiableSet(s);
  
        // We change s and the changes reflect in us.
        s.add("Practice");
        s.add("Contribute");
        System.out.println(us);
    }
}
Producción:

[Geeks, Practice, Contribute]

Si creamos un ImmutableSet a partir de un conjunto existente y cambiamos el conjunto existente, el Immutable Set no cambia porque se crea una copia.

// Creating an immutable set using copyOf()
// and modifying original set.
import java.util.*;
import com.google.common.collect.ImmutableSet;
import java.io.*;
  
class GfG
{
    public static void main(String args[])
    {
        // creating empty set
        Set<String> s = new HashSet<String>();
        s.add("GeeksforGeeks");
        s.add("Practice");
          
        // An immutable copy of s
        Set<String> is  = ImmutableSet.copyOf(s);
            
        // Now if we change 's', 'is' does not change
        s.add("Contribute");
        System.out.println(is);
    }
}

Producción :

[GeeksforGeeks, Practice]

Referencia
Creación de listas, conjuntos y mapas inmutables

Publicación traducida automáticamente

Artículo escrito por kartik y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *