ConcurrentSkipListMap en Java con ejemplos

La clase ConcurrentSkipListMap es miembro de Java Collections Framework . Fue introducido en JDK 1.6, pertenece al paquete java.util.concurrent . ConcurrentSkipListMap es una implementación escalable de ConcurrentNavigableMap . Todos los elementos se ordenan según el orden natural o por el Comparador pasado durante su tiempo de construcción. Esta clase utiliza una variación simultánea de la estructura de datos SkipList que proporciona el costo de tiempo de registro (n) para las operaciones de inserción, eliminación, actualización y acceso. Estas operaciones son seguras para ejecutarse simultáneamente por varios subprocesos. 

Declaración

clase pública ConcurrentSkipListMap<K,​V> extiende AbstractMap<K,​V> implementa ConcurrentNavigableMap<K,​V>, Cloneable, Serializable

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

La jerarquía de ConcurrentSkipListMap

ConcurrentSkipListMap-in-Java-with-Examples

Implementa las interfaces Serializable , Cloneable , ConcurrentMap<K,​V> , ConcurrentNavigableMap<K,​V> , Map<K,​V> , NavigableMap<K,​V> , SortedMap<K,​V> y extiende AbstractMap< Clase K, V> .

Constructores de ConcurrentSkipListMap

1. ConcurrentSkipListMap() : Construye un nuevo mapa vacío, clasificado según el orden natural de las claves.

ConcurrentSkipListMap<K, V> cslm = new ConcurrentSkipListMap<K, V>();

2. ConcurrentSkipListMap​(Comparator<? super K> comparador) : construye un nuevo mapa vacío, ordenado de acuerdo con el comparador especificado.

ConcurrentSkipListMap<K, V> cslm = new ConcurrentSkipListMap​<K, V>(Comparator<? super K> comparador);

3. ConcurrentSkipListMap​(Map<? extends K,​? extends V> m) : Construye un nuevo mapa que contiene las mismas asignaciones que el mapa dado, ordenadas de acuerdo con el orden natural de las claves.

ConcurrentSkipListMap<K, V> cslm = new ConcurrentSkipListMap<K, V>​(Map<? extiende K,​? extiende V> m);

4. ConcurrentSkipListMap​(SortedMap<K,​? extends V> m) : Construye un nuevo mapa que contiene las mismas asignaciones y usa el mismo orden que el mapa ordenado especificado.

ConcurrentSkipListMap​<K, V> cslm = new ConcurrentSkipListMap​<K, V>(SortedMap<K,​? extiende V> m);

Ejemplo

Java

// Java Program to Demonstrate
// ConcurrentSkipListMap
  
import java.io.*;
import java.util.*;
import java.util.concurrent.*;
  
class ConcurrentSkipListMapExample {
    public static void main(String[] args)
    {
        // create an instance of ConcurrentSkipListMap
        ConcurrentSkipListMap<String, String> cslm
            = new ConcurrentSkipListMap<String, String>();
  
        // Add mappings using put method
        cslm.put("3", "Geeks");
        cslm.put("2", "from");
        cslm.put("1", "Hi!");
        cslm.put("5", "Geeks");
        cslm.put("4", "for");
  
        // print to the console
        System.out.println("Initial Map : " + cslm);
  
        // print key-value pair whose key is greater than 2
        System.out.println("ceilingEntry-2: "
                           + cslm.ceilingEntry("2"));
  
        // get the descending key set
        NavigableSet navigableSet = cslm.descendingKeySet();
  
        System.out.println("descendingKeySet: ");
  
        // Iterate through the keySet
        Iterator itr = navigableSet.iterator();
        while (itr.hasNext()) {
            String s = (String)itr.next();
            System.out.println(s);
        }
  
        // print the first mapping
        System.out.println("firstEntry: "
                           + cslm.firstEntry());
  
        // print the last mapping
        System.out.println("lastEntry: "
                           + cslm.lastEntry());
  
        // remove the first mapping and print it
        System.out.println("pollFirstEntry: "
                           + cslm.pollFirstEntry());
  
        // print the first mapping
        System.out.println("now firstEntry: "
                           + cslm.firstEntry());
  
        // remove the last mapping and print it
        System.out.println("pollLastEntry: "
                           + cslm.pollLastEntry());
  
        // print the last mapping
        System.out.println("now lastEntry: "
                           + cslm.lastEntry());
    }
}
Producción

Initial Map : {1=Hi!, 2=from, 3=Geeks, 4=for, 5=Geeks}
ceilingEntry-2: 2=from
descendingKeySet: 
5
4
3
2
1
firstEntry: 1=Hi!
lastEntry: 5=Geeks
pollFirstEntry: 1=Hi!
now firstEntry: 2=from
pollLastEntry: 5=Geeks
now lastEntry: 4=for

Operaciones básicas

1. Agregar asignaciones

El método put() de ConcurrentSkipListMap asocia el valor especificado con la clave especificada en este mapa. Si el mapa contenía anteriormente una asignación para la clave, se reemplaza el valor anterior.

Java

// Java Program to demonstrate adding
// mappings to a ConcurrentSkipListMap
  
import java.util.concurrent.*;
  
class AddingMappingsExample {
    public static void main(String[] args)
    {
  
        // Initializing the map
        ConcurrentSkipListMap<Integer, Integer> cslm
            = new ConcurrentSkipListMap<Integer, Integer>();
  
        // Adding elements to this map
        for (int i = 1; i <= 9; i++)
            cslm.put(i, i);
  
        // put() operation on the map
        System.out.println("After put(): " + cslm);
    }
}
Producción

After put(): {1=1, 2=2, 3=3, 4=4, 5=5, 6=6, 7=7, 8=8, 9=9}

2. Eliminar asignaciones

El método remove() de ConcurrentSkipListMap elimina la asignación de la clave especificada de esta asignación. El método devuelve nulo si no hay una asignación para esa clave en particular. Después de realizar este método, se reduce el tamaño del mapa. Para eliminar la primera entrada y la última entrada del mapa, podemos usar pollFirstEntry() y pollLastEntry() respectivamente.

Java

// Java Program Demonstrate removing
// mappings from ConcurrentSkipListMap
  
import java.util.concurrent.*;
  
class RemovingMappingsExample {
    public static void main(String[] args)
    {
  
        // Initializing the map
        ConcurrentSkipListMap<Integer, Integer> cslm
            = new ConcurrentSkipListMap<Integer, Integer>();
  
        // Adding elements to this map
        for (int i = 1; i <= 6; i++)
            cslm.put(i, i);
  
        // remove() operation on the map
        cslm.remove(5);
  
        // print the modified map
        System.out.println("After remove(): " + cslm);
  
        // remove the first mapping and print it
        System.out.println("pollFirstEntry: "
                           + cslm.pollFirstEntry());
  
        // remove the last mapping and print it
        System.out.println("pollLastEntry: "
                           + cslm.pollLastEntry());
            
          // Print final map
          System.out.println("map contents: " + cslm);
    }
}
Producción

After remove(): {1=1, 2=2, 3=3, 4=4, 6=6}
pollFirstEntry: 1=1
pollLastEntry: 6=6
map contents: {2=2, 3=3, 4=4}

 3. Iterando

Podemos usar la interfaz Iterator para atravesar cualquier estructura del marco de colección. Dado que los iteradores trabajan 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 ConcurrentSkipListMap.

Java

// Java Program to demonstrate iterating
// over ConcurrentSkipListMap
  
import java.util.concurrent.*;
import java.util.*;
  
class IteratingExample {
    public static void main(String[] args)
    {
        // create an instance of ConcurrentSkipListMap
        ConcurrentSkipListMap<Integer, Integer> cslm
            = new ConcurrentSkipListMap<>();
  
        // Add mappings using put method
        for (int i = 0; i < 6; i++) {
            cslm.put(i, i);
        }
  
        // Create an Iterator over the
        // ConcurrentSkipListMap
        Iterator<ConcurrentSkipListMap
                     .Entry<Integer, Integer> > itr
            = cslm.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()) {
            ConcurrentSkipListMap
                .Entry<Integer, Integer> entry
                = itr.next();
            System.out.println("Key = " + entry.getKey()
                               + ", Value = "
                               + entry.getValue());
        }
    }
}
Producción

Key = 0, Value = 0
Key = 1, Value = 1
Key = 2, Value = 2
Key = 3, Value = 3
Key = 4, Value = 4
Key = 5, Value = 5

Métodos de ConcurrentSkipListMap

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 nula si no existe tal entrada.
tecla de techo (tecla K) Devuelve la clave mínima mayor o igual que la clave dada, o nula si no existe tal clave.
clear() Elimina todas las asignaciones de este mapa.
clon() Devuelve una copia superficial de esta instancia de ConcurrentSkipListMap.
calcular​(tecla K, BiFunction<? super K,​? super 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).
ComputeIfAbsent​(tecla K, función <? super K,​? extiende V> función de mapeo) Si la clave especificada aún no está asociada con un valor, intenta calcular su valor usando la función de mapeo dada y lo ingresa en este mapa a menos que sea nulo.
ComputeIfPresent​(tecla K, BiFunction<? super K,​? super V,​? extiende V> función de reasignación) Si el valor de la clave especificada está presente, intenta calcular una nueva asignación dada la clave y su valor asignado actual.
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.
conjuntoentrada() Devuelve una vista de conjunto de las asignaciones contenidas en este mapa.
es igual a​(Objeto o) Compara el objeto especificado con este mapa para la igualdad.
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.
primeraClave() Devuelve la primera clave (más baja) actualmente en este mapa.
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.
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.
getOrDefault​(Clave de objeto, V valor predeterminado) Devuelve el valor al que se asigna la clave especificada, o el valor predeterminado dado si este mapa no contiene ninguna asignación para la clave.
headMap​(K a Key) Devuelve una vista de la parte de este mapa cuyas claves son estrictamente menores que toKey.
headMap​(K toKey, booleano inclusive) Devuelve una vista de la parte de este mapa cuyas claves son menores que (o iguales, si inclusive es verdadero) toKey.
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.
juego de llaves() Devuelve una vista NavigableSet de las claves contenidas en este mapa.
ú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.
última clave() Devuelve la última clave (más alta) actualmente en este mapa.
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.
fusionar (tecla K, valor V, BiFunction<? super V,​? super V,​? extiende V> función de reasignación) Si la clave especificada aún no está asociada con un valor, la asocia con el valor dado.
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.
poner (tecla K, valor V) Asocia el valor especificado con la clave especificada en este mapa.
putIfAbsent​(clave K, valor V) Si la clave especificada aún no está asociada con un valor, la asocia con el valor dado.
eliminar (tecla de objeto) Elimina la asignación de la clave especificada de esta asignación, si está presente.
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.
submapa​(K fromKey, boolean fromInclusive, K toKey, boolean toInclusive) Devuelve una vista de la parte de este mapa cuyas claves van desde fromKey hasta toKey.
submapa​(K fromKey, K toKey) Devuelve una vista de la parte de este mapa cuyas claves van desde fromKey, inclusive, hasta toKey, exclusiva.
tailMap​(K fromKey) Devuelve una vista de la parte de este mapa cuyas claves son mayores o iguales que fromKey.
tailMap​(K fromKey, booleano inclusive) Devuelve una vista de la parte de este mapa cuyas claves son mayores que (o iguales, si inclusive es verdadero) fromKey.
valores() Devuelve una vista de colección de los valores contenidos en este mapa.

Métodos declarados en la clase java.util.AbstractMap

MÉTODO

DESCRIPCIÓN

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.
putAll​(Map<? extiende K,​? extiende V> m) Copia todas las asignaciones del mapa especificado a este mapa (operación opcional).
Talla() Devuelve el número de asignaciones de clave-valor en esta asignación.
Enstringr() Devuelve una representación de string de este mapa.

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

MÉTODO

DESCRIPCIÓN

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.
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.concurrent.ConcurrentNavigableMap

MÉTODO

DESCRIPCIÓN

descendingKeySet() Devuelve una vista de NavigableSet en orden inverso de las claves contenidas en este mapa.
mapadescendente() Devuelve una vista en orden inverso de las asignaciones contenidas en este mapa.
conjunto de claves navegables() Devuelve una vista NavigableSet de las claves contenidas en este mapa.

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

MÉTODO

DESCRIPCIÓN

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.
putAll​(Map<? extiende K,​? extiende V> m) Copia todas las asignaciones del mapa especificado a este mapa (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.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.

Referencia: https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/concurrent/ConcurrentSkipListMap.html

Publicación traducida automáticamente

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