Class 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[]:
    1. [0] contains the number of entries
    2. Others contain alternating key-value pairs, for example [1]="1" and [2]="value_for_1"
    Keys are calculated using (index * 2 + 1) and values are (index * 2 + 2). Performance:
    • 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.
    Allocation:
    • 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
    • Method Detail

      • containsKey

        public boolean containsKey​(String key)
        Description copied from interface: ReadOnlyStringMap
        Returns true if this data structure contains the specified key, false otherwise.
        Specified by:
        containsKey in interface ReadOnlyStringMap
        Parameters:
        key - the key whose presence to check. May be null.
        Returns:
        true if this data structure contains the specified key, false otherwise.
      • getBackingArray

        public Object[] getBackingArray()
      • 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).
      • forEach

        public <V> void forEach​(BiConsumer<String,​? super V> action)
        This version of forEach is defined on the ReadOnlyStringMap interface.
        Specified by:
        forEach in interface ReadOnlyStringMap
        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: ReadOnlyStringMap
        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.

        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's accept method may cause a ConcurrentModificationException to be thrown.

        Specified by:
        forEach in interface ReadOnlyStringMap
        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: ReadOnlyStringMap
        Returns the value for the specified key, or null if the specified key does not exist in this collection.
        Specified by:
        getValue in interface ReadOnlyStringMap
        Parameters:
        key - the key whose value to return.
        Returns:
        the value for the specified key or null.
      • toMap

        public Map<String,​String> toMap()
        Description copied from interface: ReadOnlyStringMap
        Returns a non-null mutable Map<String, String> containing a snapshot of this data structure.
        Specified by:
        toMap in interface ReadOnlyStringMap
        Returns:
        a mutable copy of this data structure in Map<String, String> form.