StoredMap (Oracle - Berkeley DB Java API)
Date: 2020-06-01

Package com.sleepycat.collections

## Class StoredMap<K,​V>

- java.lang.Object
- - com.sleepycat.collections.StoredContainer
  - - com.sleepycat.collections.StoredMap<K,​V>

- All Implemented Interfaces:
    `java.lang.Cloneable`, `java.util.concurrent.ConcurrentMap<K,​V>`, `java.util.Map<K,​V>`
  Direct Known Subclasses:
    `StoredSortedMap`

      public class StoredMap<K,​V>
      extends StoredContainer
      implements java.util.concurrent.ConcurrentMap<K,​V>

  A Map view of a `Database`.

  In addition to the standard Map methods, this class provides the following methods for stored maps only. Note that the use of these methods is not compatible with the standard Java collections interface.

  - `duplicates(K)`
  - `duplicatesMap(K, com.sleepycat.bind.EntryBinding)`
  - `append(V)`

- - ### Nested Class Summary

    - ### Nested classes/interfaces inherited from interface java.util.Map

      `java.util.Map.Entry<K extends java.lang.Object,​V extends java.lang.Object>`

  - ### Constructor Summary

    Constructors
    Constructor | Description
    --- | ---
    `StoredMap​(Database database, EntryBinding<K> keyBinding, EntityBinding<V> valueEntityBinding, boolean writeAllowed)` | Creates a map entity view of a `Database`.
    `StoredMap​(Database database, EntryBinding<K> keyBinding, EntityBinding<V> valueEntityBinding, PrimaryKeyAssigner keyAssigner)` | Creates a map entity view of a `Database` with a `PrimaryKeyAssigner`.
    `StoredMap​(Database database, EntryBinding<K> keyBinding, EntryBinding<V> valueBinding, boolean writeAllowed)` | Creates a map view of a `Database`.
    `StoredMap​(Database database, EntryBinding<K> keyBinding, EntryBinding<V> valueBinding, PrimaryKeyAssigner keyAssigner)` | Creates a map view of a `Database` with a `PrimaryKeyAssigner`.

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `K` | `append​(V value)` | Appends a given value returning the newly assigned key.
    `boolean` | `containsKey​(java.lang.Object key)` | Returns true if this map contains the specified key.
    `boolean` | `containsValue​(java.lang.Object value)` | Returns true if this map contains the specified value.
    `java.util.Collection<V>` | `duplicates​(K key)` | Returns a new collection containing the values mapped to the given key in this map.
    `<PK> java.util.Map<PK,​V>` | `duplicatesMap​(K secondaryKey, EntryBinding primaryKeyBinding)` | Returns a new map from primary key to value for the subset of records having a given secondary key (duplicates).
    `java.util.Set<java.util.Map.Entry<K,​V>>` | `entrySet()` | Returns a set view of the mappings contained in this map.
    `boolean` | `equals​(java.lang.Object other)` | Compares the specified object with this map for equality.
    `V` | `get​(java.lang.Object key)` | Returns the value to which this map maps the specified key.
    `int` | `hashCode()` |
    `java.util.Set<K>` | `keySet()` | Returns a set view of the keys contained in this map.
    `V` | `put​(K key, V value)` | Associates the specified value with the specified key in this map (optional operation).
    `void` | `putAll​(java.util.Map<? extends K,​? extends V> map)` | Copies all of the mappings from the specified map to this map (optional operation).
    `V` | `putIfAbsent​(K key, V value)` | If the specified key is not already associated with a value, associate it with the given value.
    `V` | `remove​(java.lang.Object key)` | Removes the mapping for this key from this map if present (optional operation).
    `boolean` | `remove​(java.lang.Object key, java.lang.Object value)` | Remove entry for key only if currently mapped to given value.
    `V` | `replace​(K key, V value)` | Replace entry for key only if currently mapped to some value.
    `boolean` | `replace​(K key, V oldValue, V newValue)` | Replace entry for key only if currently mapped to given value.
    `int` | `size()` | Returns a non-transactional count of the records in the collection or map.
    `java.lang.String` | `toString()` | Converts the map to a string representation for debugging.
    `java.util.Collection<V>` | `values()` | Returns a collection view of the values contained in this map.

    - ### Methods inherited from class com.sleepycat.collections.StoredContainer

      `areDuplicatesAllowed, areDuplicatesOrdered, areKeyRangesAllowed, areKeysRenumbered, clear, getCursorConfig, isEmpty, isOrdered, isSecondary, isTransactional, isWriteAllowed`

    - ### Methods inherited from class java.lang.Object

      `clone, finalize, getClass, notify, notifyAll, wait, wait, wait`

    - ### Methods inherited from interface java.util.concurrent.ConcurrentMap

      `compute, computeIfAbsent, computeIfPresent, forEach, getOrDefault, merge, replaceAll`

    - ### Methods inherited from interface java.util.Map

      `clear, isEmpty`

- - ### Constructor Detail

    - #### StoredMap

          public StoredMap​(Database database,
                           EntryBinding<K> keyBinding,
                           EntryBinding<V> valueBinding,
                           boolean writeAllowed)

      Creates a map view of a `Database`.
      Parameters:
        `database` - is the Database underlying the new collection.
        `keyBinding` - is the binding used to translate between key buffers and key objects.
        `valueBinding` - is the binding used to translate between value buffers and value objects.
        `writeAllowed` - is true to create a read-write collection or false to create a read-only collection.
      Throws:
        `java.lang.IllegalArgumentException` - if formats are not consistently defined or a parameter is invalid.
        `RuntimeExceptionWrapper` - if a checked exception is thrown, including a `DatabaseException` on BDB (C edition).

    - #### StoredMap

          public StoredMap​(Database database,
                           EntryBinding<K> keyBinding,
                           EntryBinding<V> valueBinding,
                           PrimaryKeyAssigner keyAssigner)

      Creates a map view of a `Database` with a `PrimaryKeyAssigner`. Writing is allowed for the created map.
      Parameters:
        `database` - is the Database underlying the new collection.
        `keyBinding` - is the binding used to translate between key buffers and key objects.
        `valueBinding` - is the binding used to translate between value buffers and value objects.
        `keyAssigner` - is used by the `append(V)` method to assign primary keys.
      Throws:
        `java.lang.IllegalArgumentException` - if formats are not consistently defined or a parameter is invalid.
        `RuntimeExceptionWrapper` - if a checked exception is thrown, including a `DatabaseException` on BDB (C edition).

    - #### StoredMap

          public StoredMap​(Database database,
                           EntryBinding<K> keyBinding,
                           EntityBinding<V> valueEntityBinding,
                           boolean writeAllowed)

      Creates a map entity view of a `Database`.
      Parameters:
        `database` - is the Database underlying the new collection.
        `keyBinding` - is the binding used to translate between key buffers and key objects.
        `valueEntityBinding` - is the binding used to translate between key/value buffers and entity value objects.
        `writeAllowed` - is true to create a read-write collection or false to create a read-only collection.
      Throws:
        `java.lang.IllegalArgumentException` - if formats are not consistently defined or a parameter is invalid.
        `RuntimeExceptionWrapper` - if a checked exception is thrown, including a `DatabaseException` on BDB (C edition).

    - #### StoredMap

          public StoredMap​(Database database,
                           EntryBinding<K> keyBinding,
                           EntityBinding<V> valueEntityBinding,
                           PrimaryKeyAssigner keyAssigner)

      Creates a map entity view of a `Database` with a `PrimaryKeyAssigner`. Writing is allowed for the created map.
      Parameters:
        `database` - is the Database underlying the new collection.
        `keyBinding` - is the binding used to translate between key buffers and key objects.
        `valueEntityBinding` - is the binding used to translate between key/value buffers and entity value objects.
        `keyAssigner` - is used by the `append(V)` method to assign primary keys.
      Throws:
        `java.lang.IllegalArgumentException` - if formats are not consistently defined or a parameter is invalid.
        `RuntimeExceptionWrapper` - if a checked exception is thrown, including a `DatabaseException` on BDB (C edition).

  - ### Method Detail

    - #### get

          public V get​(java.lang.Object key)

      Returns the value to which this map maps the specified key. If duplicates are allowed, this method returns the first duplicate, in the order in which duplicates are configured, that maps to the specified key. This method conforms to the `Map.get(java.lang.Object)` interface.
      Specified by:
        `get` in interface `java.util.Map<K,​V>`
      Throws:
        `RuntimeExceptionWrapper` - if a checked exception is thrown, including a `DatabaseException` on BDB (C edition).

    - #### put

          public V put​(K key,
                       V value)

      Associates the specified value with the specified key in this map (optional operation). If duplicates are allowed and the specified key is already mapped to a value, this method appends the new duplicate after the existing duplicates. This method conforms to the `Map.put(K, V)` interface.

      The key parameter may be null if an entity binding is used and the key will be derived from the value (entity) parameter. If an entity binding is used and the key parameter is non-null, then the key parameter must be equal to the key derived from the value parameter.

      Specified by:
        `put` in interface `java.util.Map<K,​V>`
      Returns:
        the previous value associated with specified key, or null if there was no mapping for the key or if duplicates are allowed.
      Throws:
        `java.lang.UnsupportedOperationException` - if the collection is indexed, or if the collection is read-only.
        `java.lang.IllegalArgumentException` - if an entity value binding is used and the primary key of the value given is different than the existing stored primary key.
        `RuntimeExceptionWrapper` - if a checked exception is thrown, including a `DatabaseException` on BDB (C edition).

    - #### append

          public K append​(V value)

      Appends a given value returning the newly assigned key. If a `PrimaryKeyAssigner` is associated with Store for this map, it will be used to assigned the returned key. Otherwise the Store must be a QUEUE or RECNO database and the next available record number is assigned as the key. This method does not exist in the standard `Map` interface.

      Note that for the JE product, QUEUE and RECNO databases are not supported, and therefore a PrimaryKeyAssigner must be associated with the map in order to call this method.

      Parameters:
        `value` - the value to be appended.
      Returns:
        the assigned key.
      Throws:
        `java.lang.UnsupportedOperationException` - if the collection is indexed, or if the collection is read-only, or if the Store has no `PrimaryKeyAssigner` and is not a QUEUE or RECNO database.
        `RuntimeExceptionWrapper` - if a checked exception is thrown, including a `DatabaseException` on BDB (C edition).

    - #### remove

          public V remove​(java.lang.Object key)

      Removes the mapping for this key from this map if present (optional operation). If duplicates are allowed, this method removes all duplicates for the given key. This method conforms to the `Map.remove(java.lang.Object)` interface.
      Specified by:
        `remove` in interface `java.util.Map<K,​V>`
      Throws:
        `java.lang.UnsupportedOperationException` - if the collection is read-only.
        `RuntimeExceptionWrapper` - if a checked exception is thrown, including a `DatabaseException` on BDB (C edition).

    - #### putIfAbsent

          public V putIfAbsent​(K key,
                               V value)

      If the specified key is not already associated with a value, associate it with the given value. This method conforms to the `ConcurrentMap.putIfAbsent(K, V)` interface.
      Specified by:
        `putIfAbsent` in interface `java.util.concurrent.ConcurrentMap<K,​V>`
      Specified by:
        `putIfAbsent` in interface `java.util.Map<K,​V>`
      Throws:
        `RuntimeExceptionWrapper` - if a checked exception is thrown, including a `DatabaseException` on BDB (C edition).

    - #### remove

          public boolean remove​(java.lang.Object key,
                                java.lang.Object value)

      Remove entry for key only if currently mapped to given value. This method conforms to the `ConcurrentMap.remove(Object,Object)` interface.
      Specified by:
        `remove` in interface `java.util.concurrent.ConcurrentMap<K,​V>`
      Specified by:
        `remove` in interface `java.util.Map<K,​V>`
      Throws:
        `RuntimeExceptionWrapper` - if a checked exception is thrown, including a `DatabaseException` on BDB (C edition).

    - #### replace

          public V replace​(K key,
                           V value)

      Replace entry for key only if currently mapped to some value. This method conforms to the `ConcurrentMap.replace(Object,Object)` interface.
      Specified by:
        `replace` in interface `java.util.concurrent.ConcurrentMap<K,​V>`
      Specified by:
        `replace` in interface `java.util.Map<K,​V>`
      Throws:
        `RuntimeExceptionWrapper` - if a checked exception is thrown, including a `DatabaseException` on BDB (C edition).

    - #### replace

          public boolean replace​(K key,
                                 V oldValue,
                                 V newValue)

      Replace entry for key only if currently mapped to given value. This method conforms to the `ConcurrentMap.replace(Object,Object,Object)` interface.
      Specified by:
        `replace` in interface `java.util.concurrent.ConcurrentMap<K,​V>`
      Specified by:
        `replace` in interface `java.util.Map<K,​V>`
      Throws:
        `RuntimeExceptionWrapper` - if a checked exception is thrown, including a `DatabaseException` on BDB (C edition).

    - #### containsKey

          public boolean containsKey​(java.lang.Object key)

      Returns true if this map contains the specified key. This method conforms to the `Map.containsKey(java.lang.Object)` interface.
      Specified by:
        `containsKey` in interface `java.util.Map<K,​V>`
      Throws:
        `RuntimeExceptionWrapper` - if a checked exception is thrown, including a `DatabaseException` on BDB (C edition).

    - #### containsValue

          public boolean containsValue​(java.lang.Object value)

      Returns true if this map contains the specified value. When an entity binding is used, this method returns whether the map contains the primary key and value mapping of the entity. This method conforms to the `Map.containsValue(java.lang.Object)` interface.
      Specified by:
        `containsValue` in interface `java.util.Map<K,​V>`
      Throws:
        `RuntimeExceptionWrapper` - if a checked exception is thrown, including a `DatabaseException` on BDB (C edition).

    - #### putAll

          public void putAll​(java.util.Map<? extends K,​? extends V> map)

      Copies all of the mappings from the specified map to this map (optional operation). When duplicates are allowed, the mappings in the specified map are effectively appended to the existing mappings in this map, that is no previously existing mappings in this map are replaced. This method conforms to the `Map.putAll(java.util.Map<? extends K, ? extends V>)` interface.
      Specified by:
        `putAll` in interface `java.util.Map<K,​V>`
      Throws:
        `java.lang.UnsupportedOperationException` - if the collection is read-only, or if the collection is indexed.
        `RuntimeExceptionWrapper` - if a checked exception is thrown, including a `DatabaseException` on BDB (C edition).

    - #### keySet

          public java.util.Set<K> keySet()

      Returns a set view of the keys contained in this map. A `SortedSet` is returned if the map supports key ranges. The returned collection will be read-only if the map is read-only. This method conforms to the `Map.keySet()` interface.

      Note that the return value is a StoredCollection and must be treated as such; for example, its iterators must be explicitly closed.

      Specified by:
        `keySet` in interface `java.util.Map<K,​V>`
      Returns:
        a `StoredKeySet` or a `StoredSortedKeySet` for this map.
      Throws:
        `RuntimeExceptionWrapper` - if a checked exception is thrown, including a `DatabaseException` on BDB (C edition).
      See Also:
        `StoredContainer.areKeyRangesAllowed()`, `StoredContainer.isWriteAllowed()`

    - #### entrySet

          public java.util.Set<java.util.Map.Entry<K,​V>> entrySet()

      Returns a set view of the mappings contained in this map. A `SortedSet` is returned if the map supports key ranges. The returned collection will be read-only if the map is read-only. This method conforms to the `Map.entrySet()` interface.

      Note that the return value is a StoredCollection and must be treated as such; for example, its iterators must be explicitly closed.

      Specified by:
        `entrySet` in interface `java.util.Map<K,​V>`
      Returns:
        a `StoredEntrySet` or a `StoredSortedEntrySet` for this map.
      Throws:
        `RuntimeExceptionWrapper` - if a checked exception is thrown, including a `DatabaseException` on BDB (C edition).
      See Also:
        `StoredContainer.areKeyRangesAllowed()`, `StoredContainer.isWriteAllowed()`

    - #### values

          public java.util.Collection<V> values()

      Returns a collection view of the values contained in this map. A `SortedSet` is returned if the map supports key ranges and the value/entity binding can be used to derive the map's key from its value/entity object. The returned collection will be read-only if the map is read-only. This method conforms to the `Map.values()` interface.

      Note that the return value is a StoredCollection and must be treated as such; for example, its iterators must be explicitly closed.

      Specified by:
        `values` in interface `java.util.Map<K,​V>`
      Returns:
        a `StoredValueSet` or a `StoredSortedValueSet` for this map.
      Throws:
        `RuntimeExceptionWrapper` - if a checked exception is thrown, including a `DatabaseException` on BDB (C edition).
      See Also:
        `StoredContainer.areKeyRangesAllowed()`, `StoredContainer.isWriteAllowed()`

    - #### duplicates

          public java.util.Collection<V> duplicates​(K key)

      Returns a new collection containing the values mapped to the given key in this map. This collection's iterator() method is particularly useful for iterating over the duplicates for a given key, since this is not supported by the standard Map interface. This method does not exist in the standard `Map` interface.

      If no mapping for the given key is present, an empty collection is returned. If duplicates are not allowed, at most a single value will be in the collection returned. If duplicates are allowed, the returned collection's add() method may be used to add values for the given key.

      Parameters:
        `key` - is the key for which values are to be returned.
      Returns:
        the new collection.
      Throws:
        `RuntimeExceptionWrapper` - if a checked exception is thrown, including a `DatabaseException` on BDB (C edition).

    - #### duplicatesMap

          public <PK> java.util.Map<PK,​V> duplicatesMap​(K secondaryKey,
                                                              EntryBinding primaryKeyBinding)

      Returns a new map from primary key to value for the subset of records having a given secondary key (duplicates). This method does not exist in the standard `Map` interface.

      If no mapping for the given key is present, an empty collection is returned. If duplicates are not allowed, at most a single value will be in the collection returned. If duplicates are allowed, the returned collection's add() method may be used to add values for the given key.

      Type Parameters:
        `PK` - the primary key class.
      Parameters:
        `secondaryKey` - is the secondary key for which duplicates values will be represented by the returned map.
        `primaryKeyBinding` - is the binding used for keys in the returned map.
      Returns:
        the new map.
      Throws:
        `RuntimeExceptionWrapper` - if a checked exception is thrown, including a `DatabaseException` on BDB (C edition).

    - #### equals

          public boolean equals​(java.lang.Object other)

      Compares the specified object with this map for equality. A value comparison is performed by this method and the stored values are compared rather than calling the equals() method of each element. This method conforms to the `Map.equals(java.lang.Object)` interface.
      Specified by:
        `equals` in interface `java.util.Map<K,​V>`
      Overrides:
        `equals` in class `java.lang.Object`
      Throws:
        `RuntimeExceptionWrapper` - if a checked exception is thrown, including a `DatabaseException` on BDB (C edition).

    - #### hashCode

          public int hashCode()

      Specified by:
        `hashCode` in interface `java.util.Map<K,​V>`
      Overrides:
        `hashCode` in class `java.lang.Object`

    - #### size

          public int size()

      Description copied from class: `StoredContainer`
      Returns a non-transactional count of the records in the collection or map. This method conforms to the `Collection.size()` and `Map.size()` interfaces.
      Specified by:
        `size` in interface `java.util.Map<K,​V>`
      Specified by:
        `size` in class `StoredContainer`
      Returns:
        the number of records.

    - #### toString

          public java.lang.String toString()

      Converts the map to a string representation for debugging. WARNING: All mappings will be converted to strings and returned and therefore the returned string may be very large.
      Overrides:
        `toString` in class `java.lang.Object`
      Returns:
        the string representation.
      Throws:
        `RuntimeExceptionWrapper` - if a checked exception is thrown, including a `DatabaseException` on BDB (C edition).

Copyright (c) 1996, 2020 Oracle and/or its affiliates. All rights reserved.