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)
DoubleKeyMap
DoubleKeyMap
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)
DoubleKeyMap
k1
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)
DoubleKeyMap
k2
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)
DoubleKeyMap
k1
.
Uses the constant number of ordinary map operations (get
).
containsAnyByKey1
in interface DoubleKeyMap<Key1,Key2,Value>
k1
- first keypublic boolean containsAnyByKey2(@NotNull Key2 k2)
DoubleKeyMap
k2
.
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)
DoubleKeyMap
k1
.
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)
DoubleKeyMap
k2
.
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()
DoubleKeyMap
key1 -> {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)
DoubleKeyMap
k1
.
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)
DoubleKeyMap
k2
.
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()
DoubleKeyMap
null
.
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)
DoubleKeyMap
k1
.
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)
DoubleKeyMap
k2
.
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)
DoubleKeyMap
k1
(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)
DoubleKeyMap
k2
(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)
DoubleKeyMap
keys1
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()
DoubleKeyMap
0
.
Works in a linear time of the map size.
clear
in interface DoubleKeyMap<Key1,Key2,Value>
protected void recalculateSize()