# Class TabularDataSupport

java.lang.Object
javax.management.openmbean.TabularDataSupport

All Implemented Interfaces:
  `Serializable, Cloneable, Map<Object,Object>, TabularData`

public class TabularDataSupport extends Object implements TabularData, Map<Object,Object>, Cloneable, Serializable
The `TabularDataSupport` class is the open data class which implements the `TabularData` and the `Map` interfaces, and which is internally based on a hash map data structure.

Since:
  1.5
See Also:
  - Serialized Form

- ## Nested Class Summary

  ### Nested classes/interfaces declared in interface Map

  `Map.Entry<K,V>`
  Modifier and Type
  Interface
  Description
  `static interface`
  `Map.Entry<K,V>`
  A map entry (key-value pair).

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `TabularDataSupport(TabularType tabularType)`
  Creates an empty `TabularDataSupport` instance whose open-type is tabularType, and whose underlying `HashMap` has a default initial capacity (101) and default load factor (0.75).
  `TabularDataSupport(TabularType tabularType, int initialCapacity, float loadFactor)`
  Creates an empty `TabularDataSupport` instance whose open-type is tabularType, and whose underlying `HashMap` has the specified initial capacity and load factor.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `Object[]`
  `calculateIndex(CompositeData value)`
  Calculates the index that would be used in this `TabularData` instance to refer to the specified composite data value parameter if it were added to this instance.
  `void`
  `clear()`
  Removes all rows from this `TabularDataSupport` instance.
  `Object`
  `clone()`
  Returns a clone of this `TabularDataSupport` instance: the clone is obtained by calling `super.clone()`, and then cloning the underlying map.
  `boolean`
  `containsKey(Object key)`
  Returns `true` if and only if this `TabularData` instance contains a `CompositeData` value (ie a row) whose index is the specified key.
  `boolean`
  `containsKey(Object[] key)`
  Returns `true` if and only if this `TabularData` instance contains a `CompositeData` value (ie a row) whose index is the specified key.
  `boolean`
  `containsValue(Object value)`
  Returns `true` if and only if this `TabularData` instance contains the specified value.
  `boolean`
  `containsValue(CompositeData value)`
  Returns `true` if and only if this `TabularData` instance contains the specified `CompositeData` value.
  `Set<Map.Entry<Object,Object>>`
  `entrySet()`
  Returns a collection view of the index to row mappings contained in this `TabularDataSupport` instance.
  `boolean`
  `equals(Object obj)`
  Compares the specified obj parameter with this `TabularDataSupport` instance for equality.
  `Object`
  `get(Object key)`
  This method simply calls `get((Object[]) key)`.
  `CompositeData`
  `get(Object[] key)`
  Returns the `CompositeData` value whose index is key, or `null` if there is no value mapping to key, in this `TabularData` instance.
  `TabularType`
  `getTabularType()`
  Returns the tabular type describing this `TabularData` instance.
  `int`
  `hashCode()`
  Returns the hash code value for this `TabularDataSupport` instance.
  `boolean`
  `isEmpty()`
  Returns `true` if this `TabularDataSupport` instance contains no rows.
  `Set<Object>`
  `keySet()`
  Returns a set view of the keys contained in the underlying map of this `TabularDataSupport` instance used to index the rows.
  `Object`
  `put(Object key, Object value)`
  This method simply calls `put((CompositeData) value)` and therefore ignores its key parameter which can be `null`.
  `void`
  `put(CompositeData value)`
  Adds value to this `TabularData` instance.
  `void`
  `putAll(Map<?,?> t)`
  Add all the values contained in the specified map t to this `TabularData` instance.
  `void`
  `putAll(CompositeData[] values)`
  Add all the elements in values to this `TabularData` instance.
  `Object`
  `remove(Object key)`
  This method simply calls `remove((Object[]) key)`.
  `CompositeData`
  `remove(Object[] key)`
  Removes the `CompositeData` value whose index is key from this `TabularData` instance, and returns the removed value, or returns `null` if there is no value whose index is key.
  `int`
  `size()`
  Returns the number of rows in this `TabularDataSupport` instance.
  `String`
  `toString()`
  Returns a string representation of this `TabularDataSupport` instance.
  `Collection<Object>`
  `values()`
  Returns a collection view of the rows contained in this `TabularDataSupport` instance.

  ### Methods declared in class Object

  `finalize, getClass, notify, notifyAll, wait, wait, wait`
  Modifier and Type
  Method
  Description
  `protected void`
  `finalize()`
  Deprecated, for removal: This API element is subject to removal in a future version.
  Finalization is deprecated and subject to removal in a future release.
  `final Class<?>`
  `getClass()`
  Returns the runtime class of this `Object`.
  `final void`
  `notify()`
  Wakes up a single thread that is waiting on this object's monitor.
  `final void`
  `notifyAll()`
  Wakes up all threads that are waiting on this object's monitor.
  `final void`
  `wait()`
  Causes the current thread to wait until it is awakened, typically by being notified or interrupted.
  `final void`
  `wait(long timeoutMillis)`
  Causes the current thread to wait until it is awakened, typically by being notified or interrupted, or until a certain amount of real time has elapsed.
  `final void`
  `wait(long timeoutMillis, int nanos)`
  Causes the current thread to wait until it is awakened, typically by being notified or interrupted, or until a certain amount of real time has elapsed.

  ### Methods declared in interface Map

  `compute, computeIfAbsent, computeIfPresent, forEach, getOrDefault, merge, putIfAbsent, remove, replace, replace, replaceAll`
  Modifier and Type
  Method
  Description
  `default Object`
  `compute(Object key, BiFunction<? super Object, ? super Object, ? extends Object> remappingFunction)`
  Attempts to compute a mapping for the specified key and its current mapped value, or `null` if there is no current mapping (optional operation).
  `default Object`
  `computeIfAbsent(Object key, Function<? super Object, ? extends Object> mappingFunction)`
  If the specified key is not already associated with a value (or is mapped to `null`), attempts to compute its value using the given mapping function and enters it into this map unless `null` (optional operation).
  `default Object`
  `computeIfPresent(Object key, BiFunction<? super Object, ? super Object, ? extends Object> remappingFunction)`
  If the value for the specified key is present and non-null, attempts to compute a new mapping given the key and its current mapped value (optional operation).
  `default void`
  `forEach(BiConsumer<? super Object, ? super Object> action)`
  Performs the given action for each entry in this map until all entries have been processed or the action throws an exception.
  `default Object`
  `getOrDefault(Object key, Object defaultValue)`
  Returns the value to which the specified key is mapped, or `defaultValue` if this map contains no mapping for the key.
  `default Object`
  `merge(Object key, Object value, BiFunction<? super Object, ? super Object, ? extends Object> remappingFunction)`
  If the specified key is not already associated with a value or is associated with null, associates it with the given non-null value (optional operation).
  `default Object`
  `putIfAbsent(Object key, Object value)`
  If the specified key is not already associated with a value (or is mapped to `null`) associates it with the given value and returns `null`, else returns the current value (optional operation).
  `default boolean`
  `remove(Object key, Object value)`
  Removes the entry for the specified key only if it is currently mapped to the specified value (optional operation).
  `default Object`
  `replace(Object key, Object value)`
  Replaces the entry for the specified key only if it is currently mapped to some value (optional operation).
  `default boolean`
  `replace(Object key, Object oldValue, Object newValue)`
  Replaces the entry for the specified key only if currently mapped to the specified value (optional operation).
  `default void`
  `replaceAll(BiFunction<? super Object, ? super Object, ? extends Object> function)`
  Replaces each entry's value with the result of invoking the given function on that entry until all entries have been processed or the function throws an exception (optional operation).

- ## Constructor Details

  - ### TabularDataSupport

    public TabularDataSupport(TabularType tabularType)
    Creates an empty `TabularDataSupport` instance whose open-type is tabularType, and whose underlying `HashMap` has a default initial capacity (101) and default load factor (0.75).

    This constructor simply calls `this(tabularType, 101, 0.75f);`

    Parameters:
      `tabularType` - the tabular type describing this `TabularData` instance; cannot be null.
    Throws:
      `IllegalArgumentException` - if the tabular type is null.

  - ### TabularDataSupport

    public TabularDataSupport(TabularType tabularType, int initialCapacity, float loadFactor)
    Creates an empty `TabularDataSupport` instance whose open-type is tabularType, and whose underlying `HashMap` has the specified initial capacity and load factor.
    Parameters:
      `tabularType` - the tabular type describing this `TabularData` instance; cannot be null.
      `initialCapacity` - the initial capacity of the HashMap.
      `loadFactor` - the load factor of the HashMap
    Throws:
      `IllegalArgumentException` - if the initial capacity is less than zero, or the load factor is nonpositive, or the tabular type is null.

- ## Method Details

  - ### getTabularType

    public TabularType getTabularType()
    Returns the tabular type describing this `TabularData` instance.
    Specified by:
      `getTabularType` in interface `TabularData`
    Returns:
      the tabular type.

  - ### calculateIndex

    public Object[] calculateIndex(CompositeData value)
    Calculates the index that would be used in this `TabularData` instance to refer to the specified composite data value parameter if it were added to this instance. This method checks for the type validity of the specified value, but does not check if the calculated index is already used to refer to a value in this `TabularData` instance.
    Specified by:
      `calculateIndex` in interface `TabularData`
    Parameters:
      `value` - the composite data value whose index in this `TabularData` instance is to be calculated; must be of the same composite type as this instance's row type; must not be null.
    Returns:
      the index that the specified value would have in this `TabularData` instance.
    Throws:
      `NullPointerException` - if value is `null`.
      `InvalidOpenTypeException` - if value does not conform to this `TabularData` instance's row type definition.

  - ### containsKey

    public boolean containsKey(Object key)
    Returns `true` if and only if this `TabularData` instance contains a `CompositeData` value (ie a row) whose index is the specified key. If key cannot be cast to a one dimension array of Object instances, this method simply returns `false`; otherwise it returns the result of the call to `this.containsKey((Object[]) key)`.
    Specified by:
      `containsKey` in interface `Map<Object,Object>`
    Parameters:
      `key` - the index value whose presence in this `TabularData` instance is to be tested.
    Returns:
      `true` if this `TabularData` indexes a row value with the specified key.

  - ### containsKey

    public boolean containsKey(Object[] key)
    Returns `true` if and only if this `TabularData` instance contains a `CompositeData` value (ie a row) whose index is the specified key. If key is `null` or does not conform to this `TabularData` instance's `TabularType` definition, this method simply returns `false`.
    Specified by:
      `containsKey` in interface `TabularData`
    Parameters:
      `key` - the index value whose presence in this `TabularData` instance is to be tested.
    Returns:
      `true` if this `TabularData` indexes a row value with the specified key.

  - ### containsValue

    public boolean containsValue(CompositeData value)
    Returns `true` if and only if this `TabularData` instance contains the specified `CompositeData` value. If value is `null` or does not conform to this `TabularData` instance's row type definition, this method simply returns `false`.
    Specified by:
      `containsValue` in interface `TabularData`
    Parameters:
      `value` - the row value whose presence in this `TabularData` instance is to be tested.
    Returns:
      `true` if this `TabularData` instance contains the specified row value.

  - ### containsValue

    public boolean containsValue(Object value)
    Returns `true` if and only if this `TabularData` instance contains the specified value.
    Specified by:
      `containsValue` in interface `Map<Object,Object>`
    Parameters:
      `value` - the row value whose presence in this `TabularData` instance is to be tested.
    Returns:
      `true` if this `TabularData` instance contains the specified row value.

  - ### get

    public Object get(Object key)
    This method simply calls `get((Object[]) key)`.
    Specified by:
      `get` in interface `Map<Object,Object>`
    Parameters:
      `key` - the key whose associated value is to be returned
    Returns:
      the value to which the specified key is mapped, or `null` if this map contains no mapping for the key
    Throws:
      `NullPointerException` - if the key is `null`
      `ClassCastException` - if the key is not of the type `Object[]`
      `InvalidKeyException` - if the key does not conform to this `TabularData` instance's `TabularType` definition

  - ### get

    public CompositeData get(Object[] key)
    Returns the `CompositeData` value whose index is key, or `null` if there is no value mapping to key, in this `TabularData` instance.
    Specified by:
      `get` in interface `TabularData`
    Parameters:
      `key` - the index of the value to get in this `TabularData` instance; must be valid with this `TabularData` instance's row type definition; must not be null.
    Returns:
      the value corresponding to key.
    Throws:
      `NullPointerException` - if the key is `null`
      `InvalidKeyException` - if the key does not conform to this `TabularData` instance's `TabularType` type definition.

  - ### put

    public Object put(Object key, Object value)
    This method simply calls `put((CompositeData) value)` and therefore ignores its key parameter which can be `null`.
    Specified by:
      `put` in interface `Map<Object,Object>`
    Parameters:
      `key` - an ignored parameter.
      `value` - the `CompositeData` to put.
    Returns:
      the value which is put
    Throws:
      `NullPointerException` - if the value is `null`
      `ClassCastException` - if the value is not of the type `CompositeData`
      `InvalidOpenTypeException` - if the value does not conform to this `TabularData` instance's `TabularType` definition
      `KeyAlreadyExistsException` - if the key for the value parameter, calculated according to this `TabularData` instance's `TabularType` definition already maps to an existing value

  - ### put

    public void put(CompositeData value)
    Description copied from interface: `TabularData`
    Adds value to this `TabularData` instance. The composite type of value must be the same as this instance's row type (ie the composite type returned by `this.getTabularType().`getRowType()``), and there must not already be an existing value in this `TabularData` instance whose index is the same as the one calculated for the value to be added. The index for value is calculated according to this `TabularData` instance's `TabularType` definition (see `TabularType.`getIndexNames()``).
    Specified by:
      `put` in interface `TabularData`
    Parameters:
      `value` - the composite data value to be added as a new row to this `TabularData` instance; must be of the same composite type as this instance's row type; must not be null.

  - ### remove

    public Object remove(Object key)
    This method simply calls `remove((Object[]) key)`.
    Specified by:
      `remove` in interface `Map<Object,Object>`
    Parameters:
      `key` - an `Object[]` representing the key to remove.
    Returns:
      previous value associated with specified key, or `null` if there was no mapping for key.
    Throws:
      `NullPointerException` - if the key is `null`
      `ClassCastException` - if the key is not of the type `Object[]`
      `InvalidKeyException` - if the key does not conform to this `TabularData` instance's `TabularType` definition

  - ### remove

    public CompositeData remove(Object[] key)
    Removes the `CompositeData` value whose index is key from this `TabularData` instance, and returns the removed value, or returns `null` if there is no value whose index is key.
    Specified by:
      `remove` in interface `TabularData`
    Parameters:
      `key` - the index of the value to get in this `TabularData` instance; must be valid with this `TabularData` instance's row type definition; must not be null.
    Returns:
      previous value associated with specified key, or `null` if there was no mapping for key.
    Throws:
      `NullPointerException` - if the key is `null`
      `InvalidKeyException` - if the key does not conform to this `TabularData` instance's `TabularType` definition

  - ### putAll

    public void putAll(Map<?,?> t)
    Add all the values contained in the specified map t to this `TabularData` instance. This method converts the collection of values contained in this map into an array of `CompositeData` values, if possible, and then call the method `putAll(CompositeData[])`. Note that the keys used in the specified map t are ignored. This method allows, for example to add the content of another `TabularData` instance with the same row type (but possibly different index names) into this instance.
    Specified by:
      `putAll` in interface `Map<Object,Object>`
    Parameters:
      `t` - the map whose values are to be added as new rows to this `TabularData` instance; if t is `null` or empty, this method returns without doing anything.
    Throws:
      `NullPointerException` - if a value in t is `null`.
      `ClassCastException` - if a value in t is not an instance of `CompositeData`.
      `InvalidOpenTypeException` - if a value in t does not conform to this `TabularData` instance's row type definition.
      `KeyAlreadyExistsException` - if the index for a value in t, calculated according to this `TabularData` instance's `TabularType` definition already maps to an existing value in this instance, or two values in t have the same index.

  - ### putAll

    public void putAll(CompositeData[] values)
    Add all the elements in values to this `TabularData` instance. If any element in values does not satisfy the constraints defined in `put`, or if any two elements in values have the same index calculated according to this `TabularData` instance's `TabularType` definition, then an exception describing the failure is thrown and no element of values is added, thus leaving this `TabularData` instance unchanged.
    Specified by:
      `putAll` in interface `TabularData`
    Parameters:
      `values` - the array of composite data values to be added as new rows to this `TabularData` instance; if values is `null` or empty, this method returns without doing anything.
    Throws:
      `NullPointerException` - if an element of values is `null`
      `InvalidOpenTypeException` - if an element of values does not conform to this `TabularData` instance's row type definition (ie its `TabularType` definition)
      `KeyAlreadyExistsException` - if the index for an element of values, calculated according to this `TabularData` instance's `TabularType` definition already maps to an existing value in this instance, or two elements of values have the same index

  - ### clear

    public void clear()
    Removes all rows from this `TabularDataSupport` instance.
    Specified by:
      `clear` in interface `Map<Object,Object>`
    Specified by:
      `clear` in interface `TabularData`

  - ### size

    public int size()
    Returns the number of rows in this `TabularDataSupport` instance.
    Specified by:
      `size` in interface `Map<Object,Object>`
    Specified by:
      `size` in interface `TabularData`
    Returns:
      the number of rows in this `TabularDataSupport` instance.

  - ### isEmpty

    public boolean isEmpty()
    Returns `true` if this `TabularDataSupport` instance contains no rows.
    Specified by:
      `isEmpty` in interface `Map<Object,Object>`
    Specified by:
      `isEmpty` in interface `TabularData`
    Returns:
      `true` if this `TabularDataSupport` instance contains no rows.

  - ### keySet

    public Set<Object> keySet()
    Returns a set view of the keys contained in the underlying map of this `TabularDataSupport` instance used to index the rows. Each key contained in this `Set` is an unmodifiable `List<?>` so the returned set view is a `Set<List<?>>` but is declared as a `Set<Object>` for compatibility reasons. The set is backed by the underlying map of this `TabularDataSupport` instance, so changes to the `TabularDataSupport` instance are reflected in the set, and vice-versa. The set supports element removal, which removes the corresponding row from this `TabularDataSupport` instance, via the `Iterator.remove()`, `Set.remove(Object)`, `Set.removeAll(Collection)`, `Set.retainAll(Collection)`, and `Set.clear()` operations. It does not support the `Set.add(E)` or `Set.addAll(Collection)` operations.
    Specified by:
      `keySet` in interface `Map<Object,Object>`
    Specified by:
      `keySet` in interface `TabularData`
    Returns:
      a set view (`Set<List<?>>`) of the keys used to index the rows of this `TabularDataSupport` instance.

  - ### values

    public Collection<Object> values()
    Returns a collection view of the rows contained in this `TabularDataSupport` instance. The returned `Collection` is a `Collection<CompositeData>` but is declared as a `Collection<Object>` for compatibility reasons. The returned collection can be used to iterate over the values. The collection is backed by the underlying map, so changes to the `TabularDataSupport` instance are reflected in the collection, and vice-versa. The collection supports element removal, which removes the corresponding index to row mapping from this `TabularDataSupport` instance, via the `Iterator.remove()`, `Collection.remove(Object)`, `Collection.removeAll(Collection)`, `Collection.retainAll(Collection)`, and `Collection.clear()` operations. It does not support the `Collection.add(E)` or `Collection.addAll(Collection)` operations.
    Specified by:
      `values` in interface `Map<Object,Object>`
    Specified by:
      `values` in interface `TabularData`
    Returns:
      a collection view (`Collection<CompositeData>`) of the values contained in this `TabularDataSupport` instance.

  - ### entrySet

    public Set<Map.Entry<Object,Object>> entrySet()
    Returns a collection view of the index to row mappings contained in this `TabularDataSupport` instance. Each element in the returned collection is a `Map.Entry<List<?>,CompositeData>` but is declared as a `Map.Entry<Object,Object>` for compatibility reasons. Each of the map entry keys is an unmodifiable `List<?>`. The collection is backed by the underlying map of this `TabularDataSupport` instance, so changes to the `TabularDataSupport` instance are reflected in the collection, and vice-versa. The collection supports element removal, which removes the corresponding mapping from the map, via the `Iterator.remove()`, `Collection.remove(Object)`, `Collection.removeAll(Collection)`, `Collection.retainAll(Collection)`, and `Collection.clear()` operations. It does not support the `Collection.add(E)` or `Collection.addAll(Collection)` operations.

    IMPORTANT NOTICE: Do not use the `setValue` method of the `Map.Entry` elements contained in the returned collection view. Doing so would corrupt the index to row mappings contained in this `TabularDataSupport` instance.

    Specified by:
      `entrySet` in interface `Map<Object,Object>`
    Returns:
      a collection view (`Set<Map.Entry<List<?>,CompositeData>>`) of the mappings contained in this map.
    See Also:
      - `Map.Entry`

  - ### clone

    public Object clone()
    Returns a clone of this `TabularDataSupport` instance: the clone is obtained by calling `super.clone()`, and then cloning the underlying map. Only a shallow clone of the underlying map is made, i.e. no cloning of the indexes and row values is made as they are immutable.
    Overrides:
      `clone` in class `Object`
    Returns:
      a clone of this instance.
    See Also:
      - `Cloneable`

  - ### equals

    public boolean equals(Object obj)
    Compares the specified obj parameter with this `TabularDataSupport` instance for equality.

    Returns `true` if and only if all of the following statements are true:

    - obj is non null,
    - obj also implements the `TabularData` interface,
    - their tabular types are equal
    - their contents (ie all CompositeData values) are equal.
    This ensures that this `equals` method works properly for obj parameters which are different implementations of the `TabularData` interface.
    Specified by:
      `equals` in interface `Map<Object,Object>`
    Specified by:
      `equals` in interface `TabularData`
    Overrides:
      `equals` in class `Object`
    Parameters:
      `obj` - the object to be compared for equality with this `TabularDataSupport` instance;
    Returns:
      `true` if the specified object is equal to this `TabularDataSupport` instance.
    See Also:
      - `Object.hashCode()`
      - `HashMap`

  - ### hashCode

    public int hashCode()
    Returns the hash code value for this `TabularDataSupport` instance.

    The hash code of a `TabularDataSupport` instance is the sum of the hash codes of all elements of information used in `equals` comparisons (ie: its tabular type and its content, where the content is defined as all the CompositeData values).

    This ensures that `t1.equals(t2)` implies that `t1.hashCode()==t2.hashCode()` for any two `TabularDataSupport` instances `t1` and `t2`, as required by the general contract of the method `Object.hashCode()`.

    However, note that another instance of a class implementing the `TabularData` interface may be equal to this `TabularDataSupport` instance as defined by `equals(Object)`, but may have a different hash code if it is calculated differently.

    Specified by:
      `hashCode` in interface `Map<Object,Object>`
    Specified by:
      `hashCode` in interface `TabularData`
    Overrides:
      `hashCode` in class `Object`
    Returns:
      the hash code value for this `TabularDataSupport` instance
    See Also:
      - `Map.Entry.hashCode()`
      - `Object.equals(Object)`
      - `Map.equals(Object)`

  - ### toString

    public String toString()
    Returns a string representation of this `TabularDataSupport` instance.

    The string representation consists of the name of this class (ie `javax.management.openmbean.TabularDataSupport`), the string representation of the tabular type of this instance, and the string representation of the contents (ie list the key=value mappings as returned by a call to `dataMap.``toString()`).

    Specified by:
      `toString` in interface `TabularData`
    Overrides:
      `toString` in class `Object`
    Returns:
      a string representation of this `TabularDataSupport` instance