- 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]