La clase ConcurrentHashMap obedece a la misma especificación funcional que HashTable e incluye todas las versiones de métodos correspondientes a cada método de una HashTable. Una HashTable admite la concurrencia total de recuperaciones y la concurrencia ajustable para actualizaciones. Todas las operaciones de ConcurrentHashMap son seguras para subprocesos, pero las operaciones de recuperación no implican el bloqueo, es decir, no admite el bloqueo de toda la tabla de una manera que impida todo acceso. Esta API es totalmente interoperable con HashTable en los programas. Está presente en el paquete java.util.concurrent .
ConcurrentHashMap amplía las clases AbstractMap<K,V> y Object. Esta API no permite que se use nulo como clave o valor y es miembro de Java Collections Framework.
Parámetros de tipo:
- K – el tipo de claves mantenidas por el mapa
- V: el tipo de valores asignados a él.
Todas las interfaces implementadas:
Serializable, ConcurrentMap<K,V>, Map<K,V>
Sintaxis:
public class ConcurrentHashMap<K,V> extends AbstractMap<K,V> implements ConcurrentMap<K,V>, Serializable
Constructores:
- ConcurrentHashMap(): crea un mapa vacío con una capacidad inicial de 16, un factor de carga de 0,75 y un nivel de concurrencia de 16.
- ConcurrentHashMap(int initialCapacity): crea un mapa vacío con la capacidad inicial dada y los valores predeterminados del factor de carga y el nivel de concurrencia.
- ConcurrentHashMap(int initialCapacity, float loadFactor): crea un mapa vacío con la capacidad inicial dada y el factor de carga dado y el nivel de concurrencia predeterminado.
- ConcurrentHashMap(int initialCapacity, float loadFactor, int concurrencyLevel): crea un mapa vacío con la capacidad inicial, el factor de carga y el nivel de concurrencia dados.
- ConcurrentHashMap(Map<? extiende K,? extiende V> m): crea un nuevo mapa con las mismas asignaciones que se dan en el mapa.
Código:
Java
// Java Program to Implement ConcurrentHashMap API import java.util.Collection; import java.util.Enumeration; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Map.Entry; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; public class ConcurrentMap<K, V> { private ConcurrentHashMap<K, V> hm; // creates an empty ConcurrentHashMap with initial // capacity 16 and load factor 0.75 public ConcurrentMap() { hm = new ConcurrentHashMap<K, V>(); } // creates an empty ConcurrentHashMap with given initial // capacity and load factor 0.75 public ConcurrentMap(int incap) { hm = new ConcurrentHashMap<K, V>(incap); } // creates an empty ConcurrentHashMap with given initial // capacity and load factor public ConcurrentMap(int incap, float lf) { hm = new ConcurrentHashMap<K, V>(incap, lf); } // creates an empty ConcurrentHashMap with given initial // capacity, load factor and concurrency level public ConcurrentMap(int incap, float lf, int concurrLevel) { hm = new ConcurrentHashMap<K, V>(incap, lf, concurrLevel); } // Creates an hashMap with the same values as the given // hashMap public ConcurrentMap(Map<? extends K, ? extends V> m) { hm = new ConcurrentHashMap<K, V>(m); } // Removes all the keys and values from the Map public void clear() { hm.clear(); } // Return true if the Map contains the given Key public boolean containsKey(Object k) { return hm.containsKey(k); } // Return true if the map contains keys that maps to the // given value public boolean containsValue(Object v) { return hm.containsValue(v); } // Returns a set view of the key-value pairs of the map public Set<Map.Entry<K, V> > entrySet() { return hm.entrySet(); } // Return the value to which the given key is mapped public V get(Object k) { return hm.get(k); } // Return true if the map does not contains any // key-value pairs public boolean isEmpty() { return hm.isEmpty(); } // Returns a set view of the key-value pairs of the map public Set<K> keySet() { return hm.keySet(); } // Maps the given value to the given key in the map public V put(K k, V v) { return hm.put(k, v); } // Copies all the key-value pairs from one map to // another public void putAll(Map<? extends K, ? extends V> mp) { hm.putAll(mp); } // Removes the mapping of the given key from its value public V remove(Object k) { return hm.remove(k); } // Returns the size of the map public int size() { return hm.size(); } // Returns the collection view of the values of the map public Collection<V> values() { return hm.values(); } // Returns an enumeration of the given values of the map public Enumeration<V> elements() { return hm.elements(); } // If the given key is not associated with the given // value then associate it. public V putIfAbsent(K k, V v) { return hm.putIfAbsent(k, v); } // Replaces the value for a key only if it is currently // mapped to some value. public V replace(K key, V value) { return hm.replace(key, value); } // Replaces the oldValue for a key only if it is // currently mapped to a given value. * public boolean replace(K key, V oValue, V nValue) { return hm.replace(key, oValue, nValue); } public static void main(String[] arg) { // Creating an object of the class ConcurrentMap<Integer, String> hm = new ConcurrentMap<Integer, String>(); hm.put(1, "Amit"); hm.put(2, "Ankush"); hm.put(3, "Akshat"); hm.put(4, "Tarun"); // Creating another Map Map<Integer, String> hm2 = new HashMap<Integer, String>(); hm.putAll(hm2); System.out.println( "The Keys of the ConcurrentHashMap is "); Set<Integer> k = hm.keySet(); Iterator<Integer> i = k.iterator(); while (i.hasNext()) { System.out.print(i.next() + " "); } System.out.println(); System.out.println( "The values of the ConcurrentHashMap is "); Collection<String> values = hm.values(); Iterator<String> s = values.iterator(); while (s.hasNext()) { System.out.print(s.next() + " "); } System.out.println(); System.out.println( "The entry set of the ConcurrentHashMap is "); Iterator<Entry<Integer, String> > er; Set<Entry<Integer, String> > ent = hm.entrySet(); er = ent.iterator(); while (er.hasNext()) { System.out.println(er.next() + " "); } System.out.println( "The ConcurrentHashMap contains Key 3 :" + hm.containsKey(3)); System.out.println( "The ConcurrentHashMap contains Tarun:" + hm.containsValue("Tarun")); System.out.println( "Put the key 10 with value Shikha if not associated : " + hm.putIfAbsent(10, "Shikha")); System.out.println( "Replace key 3 oldvalue of Akshat and newvalue Pari :" + hm.replace(3, "Akshat", "Pari")); System.out.println( "The Size of the ConcurrentHashMap is " + hm.size()); // Clearing the Concurrent map hm.clear(); if (hm.isEmpty()) System.out.println( "The ConcurrentHashMap is empty"); else System.out.println( "The ConcurrentHashMap is not empty"); } }
The Keys of the ConcurrentHashMap is 1 2 3 4 The values of the ConcurrentHashMap is Amit Ankush Akshat Tarun The entry set of the ConcurrentHashMap is 1=Amit 2=Ankush 3=Akshat 4=Tarun The ConcurrentHashMap contains Key 3 :true The ConcurrentHashMap contains Tarun:true Put the key 10 with value Shikha if not associated : null Replace key 3 oldvalue of Akshat and newvalue Pari :true The Size of the ConcurrentHashMap is 5 The ConcurrentHashMap is empty
Publicación traducida automáticamente
Artículo escrito por namitachaudhary60 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA