[Aprender JAVA desde cero | Artículo 28] Colecciones inmutables

Tabla de contenido

Tabla de contenido

Prefacio:

Colecciones inmutables:

Colecciones inmutables comunes:

1. Cree una colección inmutable de listas:

2. Cree una colección inmutable de mapas:

Escenario de aplicación:

Resumir:


Prefacio:

        En este artículo, le presentaremos la colección inmutable en JAVA, que bloquea el contenido y no puede cambiar el contenido a voluntad. Es una sección de contenido muy común en JAVA, y todos deberían tener un buen conocimiento de ella.

Colecciones inmutables:

        En Java, una colección inmutable es una colección que no se puede modificar una vez creada . Esto significa que los elementos de una colección inmutable son fijos y no se pueden agregar, eliminar ni modificar. Las principales ventajas de las colecciones inmutables son la seguridad de subprocesos y un mayor rendimiento .

seguridad del hilo:

        La seguridad de subprocesos significa que cuando una operación se realiza en un entorno de subprocesos múltiples, la operación se puede realizar correctamente sin generar resultados inconsistentes o indeterminados . En pocas palabras, la seguridad de subprocesos garantiza la exactitud y coherencia de los datos cuando varios subprocesos acceden o modifican datos compartidos al mismo tiempo.

        La seguridad de subprocesos es para garantizar la corrección y coherencia de los datos compartidos entre varios subprocesos mediante el uso de sincronización, bloqueos, operaciones atómicas o estructuras de datos seguras para subprocesos . En un entorno de subprocesos múltiples, el manejo adecuado de los problemas de seguridad de los subprocesos puede evitar problemas como condiciones de carrera, carreras de datos y puntos muertos.

Colecciones inmutables comunes:

1. Cree una colección inmutable de listas:

En Java, hay varias formas de crear una colección de listas inmutable:

1. Utilice  el método Collections.unmodifiableList()  :

List<String> list = new ArrayList<>();
list.add("apple");
list.add("banana");
list.add("orange");

List<String> immutableList = Collections.unmodifiableList(list);

Este método convierte una Lista mutable ordinaria en una Lista inmutable. Aunque los datos subyacentes se pueden modificar a través de la lista original, las operaciones de modificación en listas inmutables arrojarán una excepción `UnsupportedOperationException`.

2. Utilice  el método ImmutableList.of() de Guava   :

ImmutableList<String> immutableList = ImmutableList.of("apple", "banana", "orange");

La clase `ImmutableList` proporcionada por la biblioteca Guava proporciona una manera fácil y conveniente de crear listas inmutables. Este método acepta cualquier número de elementos como parámetro y devuelve una colección List inmutable.

3. Use el nuevo método List.of() en Java 9:

List<String> immutableList = List.of("apple", "banana", "orange");

En Java 9, se agregó el método `List.of()` para permitir la creación directa de colecciones de listas inmutables. Similar al método `ImmutableList.of()` de Guava, acepta cualquier cantidad de elementos como argumento y devuelve una lista inmutable.

Estos métodos pueden crear una colección de listas inmutable, lo que garantiza que el contenido de la colección no se pueda modificar después de la creación. Tenga en cuenta que si intenta modificar una lista inmutable, se generará una excepción. Por lo tanto, al elegir qué método usar, la elección debe basarse en la situación y la preferencia personal.

2. Cree una colección inmutable de mapas:

En Java, hay varias formas de crear una colección inmutable de mapas:

1. Utilice  el método Collections.unmodifiableMap()   :

Map<String, Integer> map = new HashMap<>();
map.put("apple", 1);
map.put("banana", 2);
map.put("orange", 3);

Map<String, Integer> immutableMap = Collections.unmodifiableMap(map);


Este método convierte un Mapa mutable ordinario en un Mapa inmutable. Aunque los datos subyacentes se pueden modificar a través del mapa original, las operaciones de modificación en el mapa inmutable arrojarán una excepción `UnsupportedOperationException`.

2. Utilice  el método ImmutableMap.of() de Guava   :

ImmutableMap<String, Integer> immutableMap = ImmutableMap.of("apple", 1, "banana", 2, "orange", 3);

La clase `ImmutableMap` proporcionada por la biblioteca Guava proporciona una manera fácil y conveniente de crear mapas inmutables. Este método acepta pares clave-valor como parámetros y devuelve una colección de mapas inmutable.

3. Use el método Map.of()  recién agregado  en Java 9:

Map<String, Integer> immutableMap = Map.of("apple", 1, "banana", 2, "orange", 3);

En Java 9, se agregó el método `Map.of()` para permitir la creación directa de colecciones de mapas inmutables. Similar al método `ImmutableMap.of()` de Guava, acepta pares clave-valor como parámetros y devuelve un mapa inmutable.

Estos métodos pueden crear una colección de mapas inmutable, lo que garantiza que el contenido de la colección no se pueda modificar después de la creación. Cabe señalar que si intenta realizar una operación de modificación en el mapa inmutable, se generará una excepción. Por lo tanto, al elegir qué método usar, la elección debe basarse en la situación y la preferencia personal.

Escenario de aplicación:

Las colecciones inmutables se usan ampliamente en muchos escenarios, los siguientes son algunos escenarios de aplicación comunes:

1. Entorno de subprocesos múltiples: en un entorno de subprocesos múltiples, las colecciones inmutables son seguras para subprocesos. Múltiples subprocesos pueden acceder y leer colecciones inmutables al mismo tiempo sin mecanismos de sincronización adicionales. Esto mejora el rendimiento de la simultaneidad y reduce los problemas de contención de subprocesos y la incoherencia de los datos.

2. Almacenamiento en caché: la aplicación de colecciones inmutables en el almacenamiento en caché es muy común. Por ejemplo, el uso de colecciones inmutables para almacenar datos en caché evita los problemas de modificación y sincronización de datos en el caché. Esto mejora el rendimiento y la fiabilidad de la memoria caché.

3. Valor de retorno del método: se puede usar una colección inmutable como valor de retorno de un método para garantizar que la persona que llama al método no pueda modificar la colección devuelta. Este enfoque puede proporcionar seguridad y estabilidad, evitando que los datos se modifiquen accidentalmente durante las llamadas a métodos.

4. Información de configuración: las colecciones inmutables se utilizan a menudo para almacenar información de configuración. La carga de información de configuración en una colección inmutable al mismo tiempo garantiza que la información de configuración no se modifique accidentalmente y proporciona coherencia y confiabilidad.

5. La clave de la tabla hash: la colección inmutable se puede utilizar como clave de la tabla hash para garantizar la unicidad de la clave y la estabilidad del valor hash. Dado que los elementos de una colección inmutable son inmutables, se garantiza que las claves de la tabla hash seguirán siendo las mismas.

6. Programación funcional: las colecciones inmutables son un concepto importante en la programación funcional. La programación funcional fomenta el uso de estructuras de datos inmutables y funciones puras. Las colecciones inmutables aseguran que no haya efectos secundarios y admiten la composición y la ejecución simultánea de funciones.

Cabe señalar que, aunque las colecciones inmutables son útiles en los escenarios anteriores, no son adecuadas para todas las situaciones. En algunos escenarios donde la colección debe modificarse y actualizarse con frecuencia, las colecciones mutables pueden ser más apropiadas. Por lo tanto, es necesario elegir si usar una colección mutable o una colección inmutable de acuerdo con los requisitos específicos de la aplicación y los requisitos de rendimiento.

Resumir:

        Una colección inmutable se refiere a una colección que no se puede modificar después de su creación y tiene las siguientes características y ventajas: 1. Estabilidad y consistencia de los datos, evitando modificaciones accidentales. 2. Seguro para subprocesos, no requiere sincronización adicional. 3. La consulta y la recuperación eficientes pueden mejorar el rendimiento mediante la optimización de las operaciones hash y de igualdad. 4. Se puede utilizar de forma segura como llave, proporcionando una mejor consistencia y estabilidad. 5. Simplifica la codificación y el mantenimiento, reduciendo la necesidad de operaciones defensivas de copia y sincronización. Las colecciones inmutables son una estructura de datos confiable, eficiente y fácil de usar para escenarios que requieren inmutabilidad de datos y seguridad de subprocesos.

Si mi contenido es útil para ti, dale me gusta, comenta y marca . ¡La creación no es fácil, el apoyo de todos es mi motivación para perseverar!

Supongo que te gusta

Origin blog.csdn.net/fckbb/article/details/131712951
Recomendado
Clasificación