public abstract class AbstractDoubleKeyMap<Key1,Key2,Value> extends java.lang.Object implements DoubleKeyMap<Key1,Key2,Value>
DoubleKeyHashMap implementation.| Modifier and Type | Field and Description |
|---|---|
protected java.util.Map<Key1,java.util.Map<Key2,Value>> |
myMapByKey1 |
protected java.util.Map<Key2,java.util.Map<Key1,Value>> |
myMapByKey2 |
protected int |
mySize |
| Modifier | Constructor and Description |
|---|---|
protected |
AbstractDoubleKeyMap(java.util.Map<Key1,java.util.Map<Key2,Value>> mapByKey1,
java.util.Map<Key2,java.util.Map<Key1,Value>> mapByKey2) |
| Modifier and Type | Method and Description |
|---|---|
void |
clear()
Clears the map.
|
boolean |
contains(Key1 k1,
Key2 k2)
Returns whether the map contains a value for the key pair
(k1, k2). |
boolean |
containsAnyByKey1(Key1 k1)
Returns whether the map contains any value for the specified first key
k1. |
boolean |
containsAnyByKey2(Key2 k2)
Returns whether the map contains any value for the specified second key
k2. |
java.util.Set<java.util.Map.Entry<Key1,java.util.Map<Key2,Value>>> |
entrySet()
Returns a set view of the map entries in a form
(key1, key2 -> value). |
java.util.Set<java.util.Map.Entry<Key2,Value>> |
entrySetByKey1(Key1 k1)
Returns a set view of the map slice by the specified first key
k1. |
java.util.Set<java.util.Map.Entry<Key1,Value>> |
entrySetByKey2(Key2 k2)
Returns a set view of the map slice by the specified second key
k2. |
Value |
get(Key1 k1,
Key2 k2)
Returns the value corresponding to the key pair
(k1, k2). |
java.util.Map<Key2,Value> |
getAllByKey1(Key1 k1)
Returns the map slice by the first key
k1 specified. |
java.util.Map<Key1,Value> |
getAllByKey2(Key2 k2)
Returns the map slice by the second key
k2 specified. |
boolean |
isEmpty()
Returns whether the map is empty.
|
java.util.Map<Key1,java.util.Set<Key2>> |
keys()
Returns all the keys of this map in a form
key1 -> {key2}. |
java.util.Set<Key2> |
keySet1(Key1 k1)
Returns the key set of the map slice by the specified first key
k1. |
java.util.Set<Key1> |
keySet2(Key2 k2)
Returns the key set of the map slice by the specified second key
k2. |
Value |
put(Key1 k1,
Key2 k2,
Value v)
Adds the triple to the map, overwrites existing one if present.
|
void |
putAll(DoubleKeyMap<Key1,Key2,Value> map)
Adds another
DoubleKeyMap to this map. |
void |
putAllForKey1(Key1 k1,
java.util.Map<Key2,Value> map)
Adds the bunch of values to the map, overwriting existing ones if present.
|
void |
putAllForKey2(Key2 k2,
java.util.Map<Key1,Value> map)
Adds the bunch of values to the map, overwriting existing ones if present.
|
protected void |
recalculateSize() |
Value |
remove(Key1 k1,
Key2 k2)
Removes the value from the map corresponding to the keys pair
(k1, k2) (if present). |
void |
removeAll(java.util.Collection<Key1> keys1,
java.util.Collection<Key2> keys2)
Removes the whole sector covered by the key sets
keys1 and key2). |
java.util.Map<Key2,Value> |
removeAllByKey1(Key1 k1)
Removes all values from the map corresponding to the first key
k1 (if present). |
java.util.Map<Key1,Value> |
removeAllByKey2(Key2 k2)
Removes all values from the map corresponding to the second key
k2 (if present). |
int |
size()
Returns the map size (the number of triples).
|
java.util.Collection<Value> |
values()
Returns a collection of values of this map.
|
java.util.Collection<Value> |
valuesByKey1(Key1 k1)
Returns the values collection of the map slice by the specified first key
k1. |
java.util.Collection<Value> |
valuesByKey2(Key2 k2)
Returns the values collection of the map slice by the specified second key
k2. |
@Nullable public Value put(@NotNull Key1 k1, @NotNull Key2 k2, @Nullable Value v)
DoubleKeyMap
Uses the constant number of ordinary map operations (get and put).
put in interface DoubleKeyMap<Key1,Key2,Value>k1 - first keyk2 - second keyv - the value (can be null).(k1, k2)public void putAllForKey1(@NotNull
Key1 k1,
@NotNull
java.util.Map<Key2,Value> map)
DoubleKeyMap(k1, k2, v), where
(k2, v) are all mappings of the specified map.
Works in a linear time of input map size.
putAllForKey1 in interface DoubleKeyMap<Key1,Key2,Value>k1 - first keymap - the second key based mappublic void putAllForKey2(@NotNull
Key2 k2,
@NotNull
java.util.Map<Key1,Value> map)
DoubleKeyMap(k1, k2, v), where
(k1, v) are all mappings of the specified map.
Works in a linear time of input map size.
putAllForKey2 in interface DoubleKeyMap<Key1,Key2,Value>k2 - second keymap - the second key based mappublic void putAll(@NotNull
DoubleKeyMap<Key1,Key2,Value> map)
DoubleKeyMapDoubleKeyMap to this map.
The values with same key pairs are overwritten.
putAll in interface DoubleKeyMap<Key1,Key2,Value>map - the mappublic int size()
DoubleKeyMap
Works in a constant time (O(1)).
Can be invalid if DoubleKeyMap.entrySet().remove was used
size in interface DoubleKeyMap<Key1,Key2,Value>public boolean isEmpty()
DoubleKeyMap
Works in a constant time (O(1)).
isEmpty in interface DoubleKeyMap<Key1,Key2,Value>@Nullable public Value get(@NotNull Key1 k1, @NotNull Key2 k2)
DoubleKeyMap(k1, k2).
Uses the constant number of ordinary map operations (get).
get in interface DoubleKeyMap<Key1,Key2,Value>k1 - first keyk2 - second keynull.@NotNull public java.util.Map<Key2,Value> getAllByKey1(@NotNull Key1 k1)
DoubleKeyMapk1 specified.
For all triples (k1, k2) -> value a map k2 -> value with fixed
k1 is returned.
Result map can be empty, but never null.
Uses the constant number of ordinary map operations (get).
getAllByKey1 in interface DoubleKeyMap<Key1,Key2,Value>k1 - first key@NotNull public java.util.Map<Key1,Value> getAllByKey2(@NotNull Key2 k2)
DoubleKeyMapk2 specified.
For all triples (k1, k2) -> value a map k1 -> value with fixed
k2 is returned.
Result map can be empty, but never null.
Uses the constant number of ordinary map operations (get).
getAllByKey2 in interface DoubleKeyMap<Key1,Key2,Value>k2 - second keypublic boolean contains(@NotNull
Key1 k1,
@NotNull
Key2 k2)
DoubleKeyMap(k1, k2).
Uses the constant number of ordinary map operations (get).
contains in interface DoubleKeyMap<Key1,Key2,Value>k1 - first keyk2 - second key(k1, k2) pair.public boolean containsAnyByKey1(@NotNull
Key1 k1)
DoubleKeyMapk1.
Uses the constant number of ordinary map operations (get).
containsAnyByKey1 in interface DoubleKeyMap<Key1,Key2,Value>k1 - first keypublic boolean containsAnyByKey2(@NotNull
Key2 k2)
DoubleKeyMapk2.
Uses the constant number of ordinary map operations (get).
containsAnyByKey2 in interface DoubleKeyMap<Key1,Key2,Value>k2 - second key@NotNull public java.util.Set<java.util.Map.Entry<Key1,java.util.Map<Key2,Value>>> entrySet()
DoubleKeyMap(key1, key2 -> value).
Works in a constant time (O(1)).
entrySet in interface DoubleKeyMap<Key1,Key2,Value>@NotNull public java.util.Set<java.util.Map.Entry<Key2,Value>> entrySetByKey1(@NotNull Key1 k1)
DoubleKeyMapk1.
Uses the constant number of ordinary map operations (get).
entrySetByKey1 in interface DoubleKeyMap<Key1,Key2,Value>@NotNull public java.util.Set<java.util.Map.Entry<Key1,Value>> entrySetByKey2(@NotNull Key2 k2)
DoubleKeyMapk2.
Uses the constant number of ordinary map operations (get).
entrySetByKey2 in interface DoubleKeyMap<Key1,Key2,Value>@NotNull public java.util.Map<Key1,java.util.Set<Key2>> keys()
DoubleKeyMapkey1 -> {key2}.
Works in a linear time of map size.
Changes in the keys map do not reflect the changes in this map.
keys in interface DoubleKeyMap<Key1,Key2,Value>@NotNull public java.util.Set<Key2> keySet1(@NotNull Key1 k1)
DoubleKeyMapk1.
Uses the constant number of ordinary map operations (get).
keySet1 in interface DoubleKeyMap<Key1,Key2,Value>k1 - first key@NotNull public java.util.Set<Key1> keySet2(@NotNull Key2 k2)
DoubleKeyMapk2.
Uses the constant number of ordinary map operations (get).
keySet2 in interface DoubleKeyMap<Key1,Key2,Value>k2 - second key@NotNull public java.util.Collection<Value> values()
DoubleKeyMapnull.
Works in a linear time of map size and uses linear memory.
Changes in the values collection do not reflect the changes in this map.
values in interface DoubleKeyMap<Key1,Key2,Value>@NotNull public java.util.Collection<Value> valuesByKey1(@NotNull Key1 k1)
DoubleKeyMapk1.
Result map can be empty, but never null.
Uses the constant number of ordinary map operations (get).
valuesByKey1 in interface DoubleKeyMap<Key1,Key2,Value>k1 - first key@NotNull public java.util.Collection<Value> valuesByKey2(@NotNull Key2 k2)
DoubleKeyMapk2.
Result map can be empty, but never null.
Uses the constant number of ordinary map operations (get).
valuesByKey2 in interface DoubleKeyMap<Key1,Key2,Value>k2 - second key@Nullable public Value remove(@NotNull Key1 k1, @NotNull Key2 k2)
DoubleKeyMap(k1, k2) (if present).
Uses the constant number of ordinary map operations (get, remove).
remove in interface DoubleKeyMap<Key1,Key2,Value>k1 - first keyk2 - second key(k1, k2) pair,
or null if it is not present@Nullable public java.util.Map<Key2,Value> removeAllByKey1(@NotNull Key1 k1)
DoubleKeyMapk1 (if present).
Works in a linear time of the size of the returned map.
removeAllByKey1 in interface DoubleKeyMap<Key1,Key2,Value>k1 - first keyk1 present just before the removal
(can be null).@Nullable public java.util.Map<Key1,Value> removeAllByKey2(@NotNull Key2 k2)
DoubleKeyMapk2 (if present).
Works in a linear time of the size of the returned map.
removeAllByKey2 in interface DoubleKeyMap<Key1,Key2,Value>k2 - second keyk2 present just before the removal
(can be null).public void removeAll(@NotNull
java.util.Collection<Key1> keys1,
@NotNull
java.util.Collection<Key2> keys2)
DoubleKeyMapkeys1 and key2).
More precisely, this method removes all entries (k1, k2, v), for which
keys1.contains(k1) && keys2.contains(k2).
Time complexity is O(n1) * O(n2), where n1 and n2 are
the sizes of the input collections.
removeAll in interface DoubleKeyMap<Key1,Key2,Value>keys1 - the first keys collectionkeys2 - the second keys collectionpublic void clear()
DoubleKeyMap0.
Works in a linear time of the map size.
clear in interface DoubleKeyMap<Key1,Key2,Value>protected void recalculateSize()