Class UnmodifiableArrayBackedMap
- java.lang.Object
-
- java.util.AbstractMap<String,String>
-
- org.apache.logging.log4j.internal.map.UnmodifiableArrayBackedMap
-
- All Implemented Interfaces:
Serializable,Map<String,String>,ReadOnlyStringMap
public class UnmodifiableArrayBackedMap extends AbstractMap<String,String> implements ReadOnlyStringMap
This class represents an immutable map, which stores its state inside a single Object[]:- [0] contains the number of entries
- Others contain alternating key-value pairs, for example [1]="1" and [2]="value_for_1"
- Implements very low-cost copies: shallow-copy the array.
- Doesn't matter for mutable operations, since we don't allow them.
- Iterates very quickly, since it iterates directly across the array. This contrasts with HashMap's requirement to scan each bucket in the table and chase each pointer.
- Is linear on gets, puts, and removes, since the table must be scanned to find a matching key.
- Zero on reads.
- Copy-and-modify operations allocate exactly two objects: the new array and the new Map instance. This is substantially better than HashMap, which requires a new Node for each entry.
- See Also:
- Serialized Form
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from class java.util.AbstractMap
AbstractMap.SimpleEntry<K extends Object,V extends Object>, AbstractMap.SimpleImmutableEntry<K extends Object,V extends Object>
-
-
Field Summary
Fields Modifier and Type Field Description static UnmodifiableArrayBackedMapEMPTY_MAP
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description voidclear()booleancontainsKey(Object key)Scans the array to find a matching key.booleancontainsKey(String key)Returnstrueif this data structure contains the specified key,falseotherwise.booleancontainsValue(Object value)Scans the array to find a matching value, with linear time.UnmodifiableArrayBackedMapcopyAndPut(String key, String value)Creates a new instance that contains the same entries as this map, plus either the new entry or updated value passed in the parameters.UnmodifiableArrayBackedMapcopyAndPutAll(Map<String,String> entriesToAdd)Creates a new instance that contains the same entries as this map, plus the new entries or updated values passed in the parameters.UnmodifiableArrayBackedMapcopyAndRemove(String key)Creates a new instance that contains the same entries as this map, minus the entry with the specified key (if such an entry exists).UnmodifiableArrayBackedMapcopyAndRemoveAll(Iterable<String> keysToRemoveIterable)Creates a new instance where the entries of provided keys are removed.Set<Map.Entry<String,String>>entrySet()voidforEach(BiConsumer<? super String,? super String> action)This version of forEach is defined on the Map interface.<V> voidforEach(BiConsumer<String,? super V> action)This version of forEach is defined on the ReadOnlyStringMap interface.<V,S>
voidforEach(TriConsumer<String,? super V,S> action, S state)Performs the given action for each key-value pair in this data structure until all entries have been processed or the action throws an exception.Stringget(Object key)Scans the array to find a matching key.Object[]getBackingArray()static UnmodifiableArrayBackedMapgetMap(Object[] backingArray)<V> VgetValue(String key)Returns the value for the specified key, ornullif the specified key does not exist in this collection.Stringput(String key, String value)voidputAll(Map<? extends String,? extends String> m)Stringremove(Object key)intsize()Returns the number of key-value pairs in this collection.Map<String,String>toMap()Returns a non-nullmutableMap<String, String>containing a snapshot of this data structure.-
Methods inherited from class java.util.AbstractMap
clone, equals, hashCode, isEmpty, keySet, toString, values
-
Methods inherited from class java.lang.Object
finalize, getClass, notify, notifyAll, wait, wait, wait
-
Methods inherited from interface java.util.Map
compute, computeIfAbsent, computeIfPresent, getOrDefault, merge, putIfAbsent, remove, replace, replace, replaceAll
-
Methods inherited from interface org.apache.logging.log4j.util.ReadOnlyStringMap
isEmpty
-
-
-
-
Field Detail
-
EMPTY_MAP
public static final UnmodifiableArrayBackedMap EMPTY_MAP
-
-
Method Detail
-
getMap
public static UnmodifiableArrayBackedMap getMap(Object[] backingArray)
-
clear
public void clear()
-
containsKey
public boolean containsKey(Object key)
Scans the array to find a matching key. Linear performance.- Specified by:
containsKeyin interfaceMap<String,String>- Overrides:
containsKeyin classAbstractMap<String,String>
-
containsKey
public boolean containsKey(String key)
Description copied from interface:ReadOnlyStringMapReturnstrueif this data structure contains the specified key,falseotherwise.- Specified by:
containsKeyin interfaceReadOnlyStringMap- Parameters:
key- the key whose presence to check. May benull.- Returns:
trueif this data structure contains the specified key,falseotherwise.
-
getBackingArray
public Object[] getBackingArray()
-
containsValue
public boolean containsValue(Object value)
Scans the array to find a matching value, with linear time. Allows null parameter.- Specified by:
containsValuein interfaceMap<String,String>- Overrides:
containsValuein classAbstractMap<String,String>
-
copyAndPut
public UnmodifiableArrayBackedMap copyAndPut(String key, String value)
Creates a new instance that contains the same entries as this map, plus either the new entry or updated value passed in the parameters.- Parameters:
key-value-- Returns:
-
copyAndPutAll
public UnmodifiableArrayBackedMap copyAndPutAll(Map<String,String> entriesToAdd)
Creates a new instance that contains the same entries as this map, plus the new entries or updated values passed in the parameters.
-
copyAndRemove
public UnmodifiableArrayBackedMap copyAndRemove(String key)
Creates a new instance that contains the same entries as this map, minus the entry with the specified key (if such an entry exists).
-
copyAndRemoveAll
public UnmodifiableArrayBackedMap copyAndRemoveAll(Iterable<String> keysToRemoveIterable)
Creates a new instance where the entries of provided keys are removed.
-
forEach
public void forEach(BiConsumer<? super String,? super String> action)
This version of forEach is defined on the Map interface.
-
forEach
public <V> void forEach(BiConsumer<String,? super V> action)
This version of forEach is defined on the ReadOnlyStringMap interface.- Specified by:
forEachin interfaceReadOnlyStringMap- Type Parameters:
V- type of the value.- Parameters:
action- The action to be performed for each key-value pair in this collection.
-
forEach
public <V,S> void forEach(TriConsumer<String,? super V,S> action, S state)
Description copied from interface:ReadOnlyStringMapPerforms the given action for each key-value pair in this data structure until all entries have been processed or the action throws an exception.The third parameter lets callers pass in a stateful object to be modified with the key-value pairs, so the TriConsumer implementation itself can be stateless and potentially reusable.
Some implementations may not support structural modifications (adding new elements or removing elements) while iterating over the contents. In such implementations, attempts to add or remove elements from the
TriConsumer'sacceptmethod may cause aConcurrentModificationExceptionto be thrown.- Specified by:
forEachin interfaceReadOnlyStringMap- Type Parameters:
V- type of the value.S- type of the third parameter.- Parameters:
action- The action to be performed for each key-value pair in this collection.state- the object to be passed as the third parameter to each invocation on the specified triconsumer.
-
getValue
public <V> V getValue(String key)
Description copied from interface:ReadOnlyStringMapReturns the value for the specified key, ornullif the specified key does not exist in this collection.- Specified by:
getValuein interfaceReadOnlyStringMap- Parameters:
key- the key whose value to return.- Returns:
- the value for the specified key or
null.
-
size
public int size()
Description copied from interface:ReadOnlyStringMapReturns the number of key-value pairs in this collection.- Specified by:
sizein interfaceMap<String,String>- Specified by:
sizein interfaceReadOnlyStringMap- Overrides:
sizein classAbstractMap<String,String>- Returns:
- the number of key-value pairs in this collection.
-
toMap
public Map<String,String> toMap()
Description copied from interface:ReadOnlyStringMapReturns a non-nullmutableMap<String, String>containing a snapshot of this data structure.- Specified by:
toMapin interfaceReadOnlyStringMap- Returns:
- a mutable copy of this data structure in
Map<String, String>form.
-
-