- ImmutableList, como sugiere el nombre, es un tipo de Lista que es inmutable. Significa que el contenido de la Lista es fijo o constante después de la declaración, es decir, son de solo lectura .
- Si se intenta agregar, eliminar y actualizar elementos en la lista, se lanza la excepción UnsupportedOperationException .
- Una ImmutableList tampoco permite elementos nulos.
- Si se intenta crear una ImmutableList con un elemento nulo, se lanza una NullPointerException . Si se intenta agregar un elemento nulo en la lista, se lanza la excepción UnsupportedOperationException .
Ventajas de ImmutableList
- Son seguros para subprocesos.
- Son eficientes en memoria.
- Dado que son inmutables, pueden transferirse a bibliotecas de terceros sin ningún problema.
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.
Declaración de clase:
@GwtCompatible(serializable=true, emulated=true) public abstract class ImmutableList extends ImmutableCollection implements List, RandomAccess
Jerarquía de clases:
java.lang.Object ↳ java.util.AbstractCollection ↳ com.google.common.collect.ImmutableCollection ↳ com.google.common.collect.ImmutableList
Creación de ImmutableList
ImmutableList se puede crear mediante varios métodos. Éstos incluyen:
- De la lista existente usando la función copyOf() de Guayaba
// Below is the Java program to create ImmutableList
import
com.google.common.collect.ImmutableList;
import
java.util.*;
class
GFG {
// Function to create ImmutableList from List
public
static
<T>
void
iList(List<T> list)
{
// Create ImmutableMap from Map using copyOf()
ImmutableList<T> immutableList =
ImmutableList.copyOf(list);
// Print the ImmutableMap
System.out.println(immutableList);
}
public
static
void
main(String[] args)
{
List<String> list =
new
ArrayList<>(
Arrays.asList(
"Geeks"
,
"For"
,
"Geeks"
));
iList(list);
}
}
Producción:
[Geeks, For, Geeks]
- Nueva ImmutableList usando la función of() de Guava
// Below is the Java program to create ImmutableList
import
com.google.common.collect.ImmutableList;
import
java.util.*;
class
GFG {
// Function to create ImmutableList
public
static
void
iList()
{
// Create ImmutableList using of()
ImmutableList<String> immutableList =
ImmutableList.of(
"Geeks"
,
"For"
,
"Geeks"
);
// Print the ImmutableMap
System.out.println(immutableList);
}
public
static
void
main(String[] args)
{
iList();
}
}
Producción:
[Geeks, For, Geeks]
- Usando el método Java 9 Factory Of()
En Java, use of() con Set, Map o List para crear una lista inmutable.
Tenga en cuenta: los programas a continuación son de Java 9. Por lo tanto, necesitaría un compilador de Java 9 para ejecutarlos.
// Java code illustrating of() method to
// create a ImmutableSet
import
java.util.*;
import
com.google.common.collect.ImmutableList;
class
GfG {
public
static
void
main(String args[])
{
// non-empty immutable set
List<String> list = List.of(
"Geeks"
,
"For"
,
"Geeks"
);
// Let's print the list
System.out.println(list);
}
}
Producción:
[Geeks, For, Geeks]
- Usando Builder() de ImmutableList
En Guava, la clase ImmnutableList proporciona una función Builder(). A través de esta función, se puede crear una nueva ImmutableList, o se puede crear
una ImmutableList a partir de una Lista existente o ambas.- Creando una nueva ImmutableList
// Java code illustrating of() method to
// create a ImmutableList
import
java.util.*;
import
com.google.common.collect.ImmutableList;
class
GfG {
public
static
void
main(String args[])
{
// non-empty immutable set
ImmutableList<String> iList = ImmutableList.<String>builder()
.add(
"Geeks"
,
"For"
,
"Geeks"
)
.build();
// Let's print the List
System.out.println(iList);
}
}
Producción:
[Geeks, For, Geeks]
- Creación de una lista inmutable a partir de una lista existente
// Java code illustrating of() method to
// create a ImmutableList
import
java.util.*;
import
com.google.common.collect.ImmutableList;
class
GfG {
public
static
void
main(String args[])
{
// non-empty immutable set
List<String> list = List.of(
"Geeks"
,
"For"
,
"Geeks"
);
ImmutableList<String> iList = ImmutableList.<String>builder()
.addAll(list)
.build();
// Let's print the List
System.out.println(iList);
}
}
Producción:
[Geeks, For, Geeks]
- Crear una nueva ImmutableList que incluya la Lista existente
// Java code illustrating of() method to
// create a ImmutableList
import
java.util.*;
import
com.google.common.collect.ImmutableList;
class
GfG {
public
static
void
main(String args[])
{
// non-empty immutable set
List<String> list = List.of(
"Geeks"
,
"For"
,
"Geeks"
);
ImmutableList<String> iList = ImmutableList.<String>builder()
.addAll(list)
.add(
"Computer"
,
"Portal"
, )
.build();
// Let's print the set
System.out.println(iList);
}
}
Producción:
[Geeks, For, Geeks, Computer, Portal]
- Creando una nueva ImmutableList
Intenta cambiar ImmutableList
Como se mencionó anteriormente, el siguiente programa lanzará UnsupportedOperationException .
// Java code to show that UnsupportedOperationException // will be thrown when ImmutableList is modified. import java.util.*; class GfG { public static void main(String args[]) { // empty immutable map List<String> list = List.of(); // Lets try adding element in List List.add("Geeks"); } }
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.unmodifiableList()?
Collections.unmodifiableList crea un contenedor alrededor de la misma lista existente de modo que el contenedor no se puede usar para modificarlo. Sin embargo, todavía podemos cambiar la lista original.
// Java program to demonstrate that a List created using // Collections.unmodifiableList() can be modified indirectly. import java.io.*; import java.util.*; class GFG { public static void main(String[] args) { List<String> list = new ArrayList<>(); list.add("Geeks"); // Create ImmutableList from List using copyOf() List<String> iList = Collections.unmodifiableList(list); // We change List and the changes reflect in iList. list.add("For"); list.add("Geeks"); System.out.println(iList); } }
Producción:
[Geeks, For, Geeks]
Si creamos una ImmutableList a partir de una Lista existente y cambiamos la Lista existente, la ImmutableList no cambia porque se crea una copia.
// Below is a Java program for // Creating an immutable List using copyOf() // and modifying original List. import java.io.*; import java.util.*; import com.google.common.collect.ImmutableList; class GFG { public static void main(String[] args) { List<String> list = new ArrayList<>(); list.add("Geeks"); // Create ImmutableList from List using copyOf() ImmutableList<String> iList = ImmutableList.copyOf(list); // We change List and the changes wont reflect in iList. list.add("For"); list.add("Geeks"); System.out.println(iList); } }
Producción :
[Geeks]
Publicación traducida automáticamente
Artículo escrito por RishabhPrabhu y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA