Interfaz ConcurrentNavigableMap en Java

La interfaz ConcurrentNavigableMap es miembro de Java Collection Framework . Se extiende desde la interfaz NavigableMap y la interfaz ConcurrentMap . ConcurrentNavigableMap proporciona acceso seguro para subprocesos a los elementos del mapa junto con métodos de navegación convenientes. Pertenece al paquete java.util.concurrent .

Declaración:

public interface ConcurrentNavigableMap<K,V> extends ConcurrentMap<K,V>, NavigableMap<K,V>

Aquí, K es el tipo de objeto clave y V es el tipo de objeto de valor.

La jerarquía de ConcurrentNavigableMap

ConcurrentNavigableMap Interface in Java

Implementa las interfaces ConcurrentMap<K,​ V> , Map<K, ​V> , NavigableMap<K,​ V> , SortedMap<K,​ V> . ConcurrentSkipListMap implementa ConcurrentNavigableMap.

Ejemplo:

Java

// Java Program to demonstrate the
// ConcurrentNavigableMap Interface
import java.util.concurrent.ConcurrentNavigableMap;
import java.util.concurrent.ConcurrentSkipListMap;
 
public class GFG {
 
    public static void main(String[] args)
    {
 
        // Instantiate an object
        // Since ConcurrentNavigableMap
        // is an interface so We use
        // ConcurrentSkipListMap
        ConcurrentNavigableMap<Integer, String> cnmap
            = new ConcurrentSkipListMap<Integer, String>();
 
        // Add elements using put() method
        cnmap.put(1, "First");
        cnmap.put(2, "Second");
        cnmap.put(3, "Third");
        cnmap.put(4, "Fourth");
 
        // Print the contents on the console
        System.out.println(
            "Mappings of ConcurrentNavigableMap : "
            + cnmap);
 
        System.out.println("HeadMap(3): "
                           + cnmap.headMap(3));
        System.out.println("TailMap(3): "
                           + cnmap.tailMap(3));
        System.out.println("SubMap(1, 3): "
                           + cnmap.subMap(1, 3));
    }
}

 
Producción:

Mappings of ConcurrentNavigableMap : {1=First, 2=Second, 3=Third, 4=Fourth}
HeadMap(3): {1=First, 2=Second}
TailMap(3): {3=Third, 4=Fourth}
SubMap(1, 3): {1=First, 2=Second}

Implementando Clases

El ConcurrentNavigableMap tiene una clase de implementación que es la clase ConcurrentSkipListMap . ConcurrentSkipListMap es una implementación escalable de la interfaz ConcurrentNavigableMap. Las claves en ConcurrentSkipListMap se clasifican por orden natural o mediante el uso de un comparador en el momento de la construcción del objeto. El ConcurrentSkipListMap tiene el costo de tiempo esperado de log(n) para las operaciones de inserción, eliminación y búsqueda. Es una clase segura para subprocesos, por lo tanto, todas las operaciones básicas se pueden realizar al mismo tiempo.
 
Sintaxis:

ConcurrentSkipListMap< ? , ? > objectName = new ConcurrentSkipListMap< ? , ? >();

Ejemplo : en el código que se proporciona a continuación, simplemente creamos una instancia de un objeto de la clase ConcurrentSkipListMap denominado cslmap. El método put() se usa para agregar elementos y remove() para eliminar elementos. Para el método remove(), la sintaxis es objectname.remove(Object key) . keySet() muestra todas las claves en el mapa (descripción en la tabla de métodos anterior).

Java

// Java Program to demonstrate the ConcurrentSkipListMap
import java.util.concurrent.*;
 
public class ConcurrentSkipListMapExample {
 
    public static void main(String[] args)
    {
 
        // Instantiate an object of
        // ConcurrentSkipListMap named cslmap
        ConcurrentSkipListMap<Integer, String> cslmap
            = new ConcurrentSkipListMap<Integer, String>();
 
        // Add elements using put()
        cslmap.put(1, "Geeks");
        cslmap.put(2, "For");
        cslmap.put(3, "Geeks");
 
        // Print the contents on the console
        System.out.println(
            "The ConcurrentSkipListMap contains: "
            + cslmap);
 
        // Print the key set using keySet()
        System.out.println(
            "\nThe ConcurrentSkipListMap key set: "
            + cslmap.keySet());
 
        // Remove elements using remove()
        cslmap.remove(3);
 
        // Print the contents on the console
        System.out.println(
            "\nThe ConcurrentSkipListMap contains: "
            + cslmap);
    }
}

Producción:

The ConcurrentSkipListMap contains: {1=Geeks, 2=For, 3=Geeks}

The ConcurrentSkipListMap key set: [1, 2, 3]

The ConcurrentSkipListMap contains: {1=Geeks, 2=For}

Operaciones básicas en ConcurrentNavigableMap

1. Agregar elementos

Para agregar elementos a un ConcurrentNavigableMap podemos usar cualquier método de la interfaz Map. El siguiente código muestra cómo usarlos. Puede observar en el código que cuando no se proporciona un Comparador en el momento de la construcción, se sigue el orden natural.

Java

// Java Program for adding elements to a
// ConcurrentNavigableMap
import java.util.concurrent.*;
 
public class AddingElementsExample {
 
    public static void main(String[] args)
    {
 
        // Instantiate an object
        // Since ConcurrentNavigableMap is an interface
        // We use ConcurrentSkipListMap
        ConcurrentNavigableMap<Integer, String> cnmap
            = new ConcurrentSkipListMap<Integer, String>();
 
        // Add elements using put()
        cnmap.put(8, "Third");
        cnmap.put(6, "Second");
        cnmap.put(3, "First");
 
        // Print the contents on the console
        System.out.println(
            "Mappings of ConcurrentNavigableMap : "
            + cnmap);
    }
}

 
Producción:

Mappings of ConcurrentNavigableMap : {3=First, 6=Second, 8=Third}

2. Eliminación de elementos

Para eliminar elementos también usamos métodos de la interfaz Map, ya que ConcurrentNavigableMap es un descendiente de Map.

Java

// Java Program for deleting
// elements from ConcurrentNavigableMap
 
import java.util.concurrent.*;
 
public class RemovingElementsExample {
 
    public static void main(String[] args)
    {
 
        // Instantiate an object
        // Since ConcurrentNavigableMap
        // is an interface
        // We use ConcurrentSkipListMap
        ConcurrentNavigableMap<Integer, String> cnmap
            = new ConcurrentSkipListMap<Integer, String>();
 
        // Add elements using put()
        cnmap.put(8, "Third");
        cnmap.put(6, "Second");
        cnmap.put(3, "First");
        cnmap.put(11, "Fourth");
 
        // Print the contents on the console
        System.out.println(
            "Mappings of ConcurrentNavigableMap : "
            + cnmap);
 
        // Remove elements using remove()
        cnmap.remove(6);
        cnmap.remove(8);
 
        // Print the contents on the console
        System.out.println(
            "\nConcurrentNavigableMap, after remove operation : "
            + cnmap);
 
        // Clear the entire map using clear()
        cnmap.clear();
        System.out.println(
            "\nConcurrentNavigableMap, after clear operation : "
            + cnmap);
    }
}

 
Producción:

Mappings of ConcurrentNavigableMap : {3=First, 6=Second, 8=Third, 11=Fourth}

ConcurrentNavigableMap, after remove operation : {3=First, 11=Fourth}

ConcurrentNavigableMap, after clear operation : {}

3. Accediendo a los Elementos

Podemos acceder a los elementos de un ConcurrentNavigableMap usando el método get(), el ejemplo de esto se da a continuación.

Java

// Java Program for accessing
// elements in a ConcurrentNavigableMap
 
import java.util.concurrent.*;
 
public class AccessingElementsExample {
 
    public static void main(String[] args)
    {
        // Instantiate an object
        // Since ConcurrentNavigableMap is an interface
        // We use ConcurrentSkipListMap
        ConcurrentNavigableMap<Integer, String> cnmap
            = new ConcurrentSkipListMap<Integer, String>();
 
        // Add elements using put()
        cnmap.put(8, "Third");
        cnmap.put(6, "Second");
        cnmap.put(3, "First");
        cnmap.put(11, "Fourth");
 
        // Accessing the elements using get()
        // with key as a parameter
        System.out.println(cnmap.get(3));
        System.out.println(cnmap.get(6));
        System.out.println(cnmap.get(8));
        System.out.println(cnmap.get(11));
 
        // Display the set of keys using keySet()
        System.out.println(
            "\nThe ConcurrentNavigableMap key set: "
            + cnmap.keySet());
    }
}

 
Producción:

First
Second
Third
Fourth

The ConcurrentNavigableMap key set: [3, 6, 8, 11]

4. Atravesando

Podemos usar la interfaz Iterator para atravesar cualquier estructura del marco de colección. Dado que los iteradores funcionan con un tipo de datos, usamos .Entry< ? , ? > para resolver los dos tipos separados en un formato compatible. Luego, usando el método next() imprimimos los elementos del ConcurrentNavigableMap.

Java

// Java Program for traversing a ConcurrentNavigableMap
 
import java.util.concurrent.*;
import java.util.*;
 
public class TraversalExample {
 
    public static void main(String[] args)
    {
 
        // Instantiate an object
        // Since ConcurrentNavigableMap is an interface
        // We use ConcurrentSkipListMap
        ConcurrentNavigableMap<Integer, String> cnmap
            = new ConcurrentSkipListMap<Integer, String>();
 
        // Add elements using put()
        cnmap.put(8, "Third");
        cnmap.put(6, "Second");
        cnmap.put(3, "First");
        cnmap.put(11, "Fourth");
 
        // Create an Iterator over the
        // ConcurrentNavigableMap
        Iterator<ConcurrentNavigableMap
                     .Entry<Integer, String> > itr
            = cnmap.entrySet().iterator();
 
        // The hasNext() method is used to check if there is
        // a next element The next() method is used to
        // retrieve the next element
        while (itr.hasNext()) {
            ConcurrentNavigableMap
                .Entry<Integer, String> entry
                = itr.next();
            System.out.println("Key = " + entry.getKey()
                               + ", Value = "
                               + entry.getValue());
        }
    }
}

 
Producción:

Key = 3, Value = First
Key = 6, Value = Second
Key = 8, Value = Third
Key = 11, Value = Fourth

Nota: Cada vez que decimos ‘elementos de ConcurrentNavigableMap’, debe tenerse en cuenta que los elementos se almacenan en el objeto de una clase de implementación de ConcurrentNavigableMap en este caso ConcurrentSkipListMap.

Métodos de ConcurrentNavigableMap

ConcurrentNavigableMap hereda métodos de la interfaz Map , la interfaz SortedMap , la interfaz ConcurrentMap y la interfaz NavigableMap . Las interfaces principales proporcionan los métodos básicos para agregar elementos, eliminar elementos y atravesarlos. Los métodos de ConcurrentNavigableMap se proporcionan en la siguiente tabla. Aquí,

  • K – El tipo de claves en el mapa.
  • V – El tipo de valores mapeados en el mapa.

Método

Descripción

descendingKeySet() Devuelve una vista NavigableSet en orden inverso de las claves contenidas en el mapa.
mapadescendente() Devuelve una vista en orden inverso de las asignaciones en el mapa.
headMap​(K a Key) Devuelve la vista de la parte del mapa en la que las claves son menores que toKey.
headMap​(K toKey, booleano inclusive) Devuelve la vista de la parte del mapa en la que las claves son menores que toKey e iguales a toKey si inclusive es verdadero.
juego de llaves() Devuelve una vista NavigableSet de las claves contenidas en este mapa.
conjunto de claves navegables() Devuelve una vista NavigableSet de las claves contenidas en este mapa.
subMap(K fromKey, boolean fromInclusive, K toKey, boolean toInclusive) Devuelve una vista de la parte del mapa, claves que van desde fromKey hasta toKey.
submapa(K de clave, K a clave) Devuelve una vista de la parte del mapa, claves que van desde fromKey, inclusive, hasta toKey, exclusiva.
tailMap(K fromKey) Devuelve una vista del mapa en la que las claves son mayores que fromKey.
tailMap(K fromKey, booleano inclusive) Devuelve una vista del mapa en la que las claves son mayores que fromKey e iguales si inclusive es verdadero.

Métodos declarados en la interfaz java.util.concurrent.ConcurrentMap

MÉTODO

DESCRIPCIÓN

computar (tecla K, BiFunction<? super K,

¿? súper V,? extiende V> función de reasignación)

Intenta calcular una asignación para la clave especificada y su valor asignado actual (o nulo si no hay una asignación actual).

calcular si está ausente (tecla K, función <? super K,

? extiende V> función de mapeo)

Si la clave especificada aún no está asociada con un valor (o está asignada a un valor nulo), intenta calcular su valor 

usando la función de mapeo dada y la ingresa en este mapa a menos que sea nulo.

ComputeIfPresent​(tecla K, BiFunction<? super K,​? 

súper V,? extiende V> función de reasignación)

Si el valor de la clave especificada está presente y no es nulo, intenta calcular una nueva asignación dada la clave y su valor asignado actual.
forEach​(BiConsumidor<? super K,​? super V> acción) Realiza la acción dada para cada entrada en este mapa hasta que todas las entradas hayan sido procesadas o la acción arroje una excepción.
getOrDefault​(Clave de objeto, V valor predeterminado) Devuelve el valor al que se asigna la clave especificada o defaultValue si este mapa no contiene ninguna asignación para la clave.

fusionar (tecla K, valor V, BiFunction<? super V

,? súper V,? extiende V> función de reasignación)

Si la clave especificada aún no está asociada con un valor o está asociada con un valor nulo, la asocia con el valor no nulo proporcionado.
putIfAbsent​(clave K, valor V) Si la clave especificada aún no está asociada con un valor, la asocia con el valor dado.
eliminar (clave de objeto, valor de objeto) Elimina la entrada de una clave solo si actualmente está asignada a un valor dado.
reemplazar (tecla K, valor V) Reemplaza la entrada de una clave solo si actualmente está asignada a algún valor.
reemplazar (tecla K, V valor anterior, V valor nuevo) Reemplaza la entrada de una clave solo si actualmente está asignada a un valor dado.

replaceAll​(BiFunction<? super K,​? super V

,? extiende la función V>)

Reemplaza el valor de cada entrada con el resultado de invocar la función dada en esa entrada hasta que se hayan procesado todas las entradas o la función produzca una excepción.

Métodos declarados en la interfaz java.util.Map

MÉTODO

DESCRIPCIÓN

clear() Elimina todas las asignaciones de este mapa (operación opcional).
containsKey​(clave de objeto) Devuelve verdadero si este mapa contiene un mapeo para la clave especificada.
contiene valor (valor del objeto) Devuelve verdadero si este mapa asigna una o más claves al valor especificado.
es igual a​(Objeto o) Compara el objeto especificado con este mapa para la igualdad.
obtener (clave de objeto) Devuelve el valor al que se asigna la clave especificada, o nulo si este mapa no contiene ninguna asignación para la clave.
código hash() Devuelve el valor del código hash para este mapa.
esta vacio() Devuelve verdadero si este mapa no contiene asignaciones de clave-valor.
poner (tecla K, valor V) Asocia el valor especificado con la clave especificada en este mapa (operación opcional).
putAll​(Map<? extiende K,​? extiende V> m) Copia todas las asignaciones del mapa especificado a este mapa (operación opcional).
eliminar (tecla de objeto) Elimina el mapeo de una clave de este mapa si está presente (operación opcional).
Talla() Devuelve el número de asignaciones de clave-valor en esta asignación.

Métodos declarados en la interfaz java.util.NavigableMap

MÉTODO

DESCRIPCIÓN

entrada de techo (tecla K) Devuelve una asignación de clave-valor asociada con la clave mínima mayor o igual que la clave dada, o nulo si no existe tal clave.
tecla de techo (tecla K) Devuelve la clave mínima mayor o igual que la clave dada, o nula si no existe tal clave.
Primera entrada() Devuelve una asignación de clave-valor asociada con la clave mínima en esta asignación, o nula si la asignación está vacía.
entrada de piso (tecla K) Devuelve una asignación de clave-valor asociada con la clave mayor menor o igual que la clave dada, o nula si no existe tal clave.
FloorKey (tecla K) Devuelve la clave mayor menor o igual que la clave dada, o nula si no existe tal clave.
entrada superior (tecla K) Devuelve un mapeo de clave-valor asociado con la clave mínima estrictamente mayor que la clave dada, o nulo si no existe tal clave.
clave superior (tecla K) Devuelve la clave mínima estrictamente mayor que la clave dada, o nula si no existe tal clave.
última entrada() Devuelve una asignación de clave-valor asociada con la clave mayor en esta asignación, o nula si la asignación está vacía.
entrada inferior (tecla K) Devuelve un mapeo de clave-valor asociado con la clave mayor estrictamente menor que la clave dada, o nulo si no existe tal clave.
tecla inferior (tecla K) Devuelve la clave mayor estrictamente menor que la clave dada, o nula si no existe tal clave.
encuestaPrimeraEntrada() Elimina y devuelve un mapeo de clave-valor asociado con la clave mínima en este mapa, o nulo si el mapa está vacío.
encuestaÚltimaEntrada() Elimina y devuelve un mapeo de clave-valor asociado con la clave mayor en este mapa, o nulo si el mapa está vacío.

Métodos declarados en la interfaz java.util.SortedMap

MÉTODO

DESCRIPCIÓN

comparador() Devuelve el comparador usado para ordenar las claves en este mapa, o nulo si este mapa usa el ordenamiento natural de sus claves.
conjuntoentrada() Devuelve una vista de conjunto de las asignaciones contenidas en este mapa.
primeraClave() Devuelve la primera clave (más baja) actualmente en este mapa.
última clave() Devuelve la última clave (más alta) actualmente en este mapa.
 valores() Devuelve una vista de colección de los valores contenidos en este mapa.

Publicación traducida automáticamente

Artículo escrito por ManasiKirloskar 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 *