org.jjoost.collections.maps.base
Class InlineListHashMap<K,V,N extends HashNode<N> & java.util.Map.Entry<K,V>>

java.lang.Object
  extended by org.jjoost.collections.maps.base.AbstractHashMap<K,V,N>
      extended by org.jjoost.collections.maps.base.InlineListHashMap<K,V,N>
All Implemented Interfaces:
java.io.Serializable, AnyMap<K,V>, AnyReadMap<K,V>, ListMap<K,V>, Function<K,java.lang.Iterable<V>>
Direct Known Subclasses:
LockFreeInlineListHashMap, LockFreeLinkedInlineListHashMap, SerialInlineListHashMap, SerialLinkedInlineListHashMap

public class InlineListHashMap<K,V,N extends HashNode<N> & java.util.Map.Entry<K,V>>
extends AbstractHashMap<K,V,N>
implements ListMap<K,V>

See Also:
Serialized Form

Method Summary
 boolean add(K key, V val)
          Attempt to add the pair to the map, returning false if it could not be added, and true otherwise.
 java.lang.Iterable<V> apply(K v)
          Returns the result of applying the function to the parameter
 ListMap<K,V> copy()
          Returns a copy of the map.
 MultiSet<java.util.Map.Entry<K,V>> entries()
          Returns a set representing all the key->value pairs in this map.
 MultiSet<K> keys()
          Returns a set representing all the keys in the domain of this map.
 boolean permitsDuplicateKeys()
          Returns true if a key can map to more than one value
 V put(K key, V val)
          Appends the provided key->value pair to the map; if equal pairs already exist they are not overridden, but co-exist with the new pair
 V putIfAbsent(K key, V val)
          Appends the provided key->value pair to the map if no pair exists where both key and value are equal to the one provided; otherwise the value of the first equal pair encountered is returned and the map is not modified
 int uniqueKeyCount()
          Return an integer representing the number of unique keys in the domain of the map
 MultiSet<V> values(K key)
          Returns a set representing the values associated with the provided key in this map.
 
Methods inherited from class org.jjoost.collections.maps.base.AbstractHashMap
clear, clearAndReturn, contains, contains, count, count, entries, first, inverse, isEmpty, list, remove, remove, removeAndReturn, removeAndReturn, removeAndReturnFirst, shrink, totalCount, values
 
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 
Methods inherited from interface org.jjoost.collections.AnyMap
clear, clearAndReturn, inverse, remove, remove, removeAndReturn, removeAndReturn, removeAndReturnFirst, shrink, values
 
Methods inherited from interface org.jjoost.collections.AnyReadMap
contains, contains, count, count, entries, first, isEmpty, list, totalCount
 

Method Detail

entries

public MultiSet<java.util.Map.Entry<K,V>> entries()
Description copied from interface: AnyReadMap
Returns a set representing all the key->value pairs in this map. In a ListMap this will be a MultiSet. This set should always reflect changes to the map, and changes to the set should be reflected in the map also. Otherwise, this set should behave exactly as a regular set does.

Specified by:
entries in interface AnyMap<K,V>
Specified by:
entries in interface AnyReadMap<K,V>
Specified by:
entries in interface ListMap<K,V>
Returns:
the entry set< k>

keys

public MultiSet<K> keys()
Description copied from interface: AnyReadMap
Returns a set representing all the keys in the domain of this map. In a MultiMap or ListMap this will be a MultiSet. This set should always reflect changes to the map, and changes to the set should be reflected in the map also. Otherwise, this set should behave exactly as a regular set does. The key equality used by this map can be obtained from this set.

Depending on the implementation of map, this key set may contain every occurrence of equal keys provided to the map, or may contain a subset thereof with repetitions to bring the number of occurrences in line with the number provided.

Note that the put() methods on this set will always fail, because no value can be provided to update the map with.

Specified by:
keys in interface AnyMap<K,V>
Specified by:
keys in interface AnyReadMap<K,V>
Specified by:
keys in interface ListMap<K,V>
Returns:
the key set< k>

add

public boolean add(K key,
                   V val)
Description copied from interface: AnyMap
Attempt to add the pair to the map, returning false if it could not be added, and true otherwise. In a ListMap the return value will always be true; however in a MultiMap it will be false, and hence the map remain unmodified, if a pair whose key and value are both equal to the ones provided (as determined by the map's definitions of equality) is already present; and in a Map it will be false if a pair whose key is equal to the one provided is already present. When the value of the pair is inequal to null, this is equivalent to put(key, value) == null

Specified by:
add in interface AnyMap<K,V>
Parameters:
key - key to insert
val - value to insert
Returns:
true if the map was modified, false otherwise

put

public V put(K key,
             V val)
Description copied from interface: ListMap
Appends the provided key->value pair to the map; if equal pairs already exist they are not overridden, but co-exist with the new pair

Specified by:
put in interface AnyMap<K,V>
Specified by:
put in interface ListMap<K,V>
Parameters:
key - the key
val - the val
Returns:
null

putIfAbsent

public V putIfAbsent(K key,
                     V val)
Description copied from interface: ListMap
Appends the provided key->value pair to the map if no pair exists where both key and value are equal to the one provided; otherwise the value of the first equal pair encountered is returned and the map is not modified

Specified by:
putIfAbsent in interface AnyMap<K,V>
Specified by:
putIfAbsent in interface ListMap<K,V>
Parameters:
key - the key
val - the val
Returns:
value of any existing pair where both key and value are equal

apply

public java.lang.Iterable<V> apply(K v)
Description copied from interface: Function
Returns the result of applying the function to the parameter

Specified by:
apply in interface Function<K,java.lang.Iterable<V>>
Parameters:
v - something of type domain
Returns:
the result of the function (something of type range)

permitsDuplicateKeys

public boolean permitsDuplicateKeys()
Description copied from interface: AnyReadMap
Returns true if a key can map to more than one value

Specified by:
permitsDuplicateKeys in interface AnyReadMap<K,V>
Returns:
true, if keys can map to more than one value

uniqueKeyCount

public int uniqueKeyCount()
Description copied from interface: AnyReadMap
Return an integer representing the number of unique keys in the domain of the map

Specified by:
uniqueKeyCount in interface AnyReadMap<K,V>
Returns:
number of unique keys

copy

public ListMap<K,V> copy()
Description copied from interface: AnyMap
Returns a copy of the map. Note that this method may not necessarily return an object of the same class as the one it is called upon, but will return one indistinguishable from it with respect to all method calls.

Specified by:
copy in interface AnyMap<K,V>
Specified by:
copy in interface ListMap<K,V>
Returns:
the any map< k, v>

values

public MultiSet<V> values(K key)
Description copied from interface: AnyReadMap
Returns a set representing the values associated with the provided key in this map. This set should always reflect changes to the map, and changes to the set should be reflected in the map also. Otherwise, this set should behave exactly as a regular set does.

Note that in a regular (scalar) map the set returned will be a UnitarySet, which contains at most one value. put() operations on such a set will override any existing value regardless of if it is equal to the one already present.

Specified by:
values in interface AnyMap<K,V>
Specified by:
values in interface AnyReadMap<K,V>
Specified by:
values in interface ListMap<K,V>
Returns:
the set of values mapped to by provided key