Class AbstractDoubleKeyMap<Key1,Key2,Value>
- java.lang.Object
-
- jetbrains.buildServer.util.AbstractDoubleKeyMap<Key1,Key2,Value>
-
- All Implemented Interfaces:
DoubleKeyMap<Key1,Key2,Value>
- Direct Known Subclasses:
DoubleKeyHashMap
public abstract class AbstractDoubleKeyMap<Key1,Key2,Value> extends java.lang.Object implements DoubleKeyMap<Key1,Key2,Value>
Represents a general not thread safeDoubleKeyHashMap
implementation.- Since:
- 8.1
- Author:
- Maxim Podkolzine (maxim.podkolzine@jetbrains.com)
-
-
Field Summary
Fields Modifier and Type Field 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
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method 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 keyk1
.boolean
containsAnyByKey2(Key2 k2)
Returns whether the map contains any value for the specified second keyk2
.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 keyk1
.java.util.Set<java.util.Map.Entry<Key1,Value>>
entrySetByKey2(Key2 k2)
Returns a set view of the map slice by the specified second keyk2
.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 keyk1
specified.java.util.Map<Key1,Value>
getAllByKey2(Key2 k2)
Returns the map slice by the second keyk2
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 formkey1 -> {key2}
.java.util.Set<Key2>
keySet1(Key1 k1)
Returns the key set of the map slice by the specified first keyk1
.java.util.Set<Key1>
keySet2(Key2 k2)
Returns the key set of the map slice by the specified second keyk2
.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 anotherDoubleKeyMap
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 setskeys1
andkey2
).java.util.Map<Key2,Value>
removeAllByKey1(Key1 k1)
Removes all values from the map corresponding to the first keyk1
(if present).java.util.Map<Key1,Value>
removeAllByKey2(Key2 k2)
Removes all values from the map corresponding to the second keyk2
(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 keyk1
.java.util.Collection<Value>
valuesByKey2(Key2 k2)
Returns the values collection of the map slice by the specified second keyk2
.
-
-
-
Method Detail
-
put
@Nullable public Value put(@NotNull Key1 k1, @NotNull Key2 k2, @Nullable Value v)
Description copied from interface:DoubleKeyMap
Adds the triple to the map, overwrites existing one if present.Uses the constant number of ordinary map operations (
get
andput
).- Specified by:
put
in interfaceDoubleKeyMap<Key1,Key2,Value>
- Parameters:
k1
- first keyk2
- second keyv
- the value (can benull
).- Returns:
- previous value for the
(k1, k2)
-
putAllForKey1
public void putAllForKey1(@NotNull Key1 k1, @NotNull java.util.Map<Key2,Value> map)
Description copied from interface:DoubleKeyMap
Adds the bunch of values to the map, overwriting existing ones if present. More precisely, this method adds the entries(k1, k2, v)
, where(k2, v)
are all mappings of the specifiedmap
.Works in a linear time of input
map
size.- Specified by:
putAllForKey1
in interfaceDoubleKeyMap<Key1,Key2,Value>
- Parameters:
k1
- first keymap
- the second key based map
-
putAllForKey2
public void putAllForKey2(@NotNull Key2 k2, @NotNull java.util.Map<Key1,Value> map)
Description copied from interface:DoubleKeyMap
Adds the bunch of values to the map, overwriting existing ones if present. More precisely, this method adds the entries(k1, k2, v)
, where(k1, v)
are all mappings of the specifiedmap
.Works in a linear time of input
map
size.- Specified by:
putAllForKey2
in interfaceDoubleKeyMap<Key1,Key2,Value>
- Parameters:
k2
- second keymap
- the second key based map
-
putAll
public void putAll(@NotNull DoubleKeyMap<Key1,Key2,Value> map)
Description copied from interface:DoubleKeyMap
Adds anotherDoubleKeyMap
to this map.The values with same key pairs are overwritten.
- Specified by:
putAll
in interfaceDoubleKeyMap<Key1,Key2,Value>
- Parameters:
map
- the map
-
size
public int size()
Description copied from interface:DoubleKeyMap
Returns the map size (the number of triples).Works in a constant time (
O(1)
). Can be invalid if DoubleKeyMap.entrySet().remove was used- Specified by:
size
in interfaceDoubleKeyMap<Key1,Key2,Value>
- Returns:
- map size
-
isEmpty
public boolean isEmpty()
Description copied from interface:DoubleKeyMap
Returns whether the map is empty.Works in a constant time (
O(1)
).- Specified by:
isEmpty
in interfaceDoubleKeyMap<Key1,Key2,Value>
- Returns:
- true if the map is empty
-
get
@Nullable public Value get(@NotNull Key1 k1, @NotNull Key2 k2)
Description copied from interface:DoubleKeyMap
Returns the value corresponding to the key pair(k1, k2)
.Uses the constant number of ordinary map operations (
get
).- Specified by:
get
in interfaceDoubleKeyMap<Key1,Key2,Value>
- Parameters:
k1
- first keyk2
- second key- Returns:
- the value if present, or
null
.
-
getAllByKey1
@NotNull public java.util.Map<Key2,Value> getAllByKey1(@NotNull Key1 k1)
Description copied from interface:DoubleKeyMap
Returns the map slice by the first keyk1
specified. For all triples(k1, k2) -> value
a mapk2 -> value
with fixedk1
is returned.Result map can be empty, but never
null
.Uses the constant number of ordinary map operations (
get
).- Specified by:
getAllByKey1
in interfaceDoubleKeyMap<Key1,Key2,Value>
- Parameters:
k1
- first key- Returns:
- map slice by the first key
-
getAllByKey2
@NotNull public java.util.Map<Key1,Value> getAllByKey2(@NotNull Key2 k2)
Description copied from interface:DoubleKeyMap
Returns the map slice by the second keyk2
specified. For all triples(k1, k2) -> value
a mapk1 -> value
with fixedk2
is returned.Result map can be empty, but never
null
.Uses the constant number of ordinary map operations (
get
).- Specified by:
getAllByKey2
in interfaceDoubleKeyMap<Key1,Key2,Value>
- Parameters:
k2
- second key- Returns:
- map slice by the second key
-
contains
public boolean contains(@NotNull Key1 k1, @NotNull Key2 k2)
Description copied from interface:DoubleKeyMap
Returns whether the map contains a value for the key pair(k1, k2)
.Uses the constant number of ordinary map operations (
get
).- Specified by:
contains
in interfaceDoubleKeyMap<Key1,Key2,Value>
- Parameters:
k1
- first keyk2
- second key- Returns:
- true if there is a value for the
(k1, k2)
pair.
-
containsAnyByKey1
public boolean containsAnyByKey1(@NotNull Key1 k1)
Description copied from interface:DoubleKeyMap
Returns whether the map contains any value for the specified first keyk1
.Uses the constant number of ordinary map operations (
get
).- Specified by:
containsAnyByKey1
in interfaceDoubleKeyMap<Key1,Key2,Value>
- Parameters:
k1
- first key- Returns:
- true if there is a value for the first key
-
containsAnyByKey2
public boolean containsAnyByKey2(@NotNull Key2 k2)
Description copied from interface:DoubleKeyMap
Returns whether the map contains any value for the specified second keyk2
.Uses the constant number of ordinary map operations (
get
).- Specified by:
containsAnyByKey2
in interfaceDoubleKeyMap<Key1,Key2,Value>
- Parameters:
k2
- second key- Returns:
- true if there is a value for the second key
-
entrySet
@NotNull public java.util.Set<java.util.Map.Entry<Key1,java.util.Map<Key2,Value>>> entrySet()
Description copied from interface:DoubleKeyMap
Returns a set view of the map entries in a form(key1, key2 -> value)
.Works in a constant time (
O(1)
).- Specified by:
entrySet
in interfaceDoubleKeyMap<Key1,Key2,Value>
- Returns:
- a set view of the mappings contained in this map
-
entrySetByKey1
@NotNull public java.util.Set<java.util.Map.Entry<Key2,Value>> entrySetByKey1(@NotNull Key1 k1)
Description copied from interface:DoubleKeyMap
Returns a set view of the map slice by the specified first keyk1
.Uses the constant number of ordinary map operations (
get
).- Specified by:
entrySetByKey1
in interfaceDoubleKeyMap<Key1,Key2,Value>
- Returns:
- a set view of the map slice by the first key
-
entrySetByKey2
@NotNull public java.util.Set<java.util.Map.Entry<Key1,Value>> entrySetByKey2(@NotNull Key2 k2)
Description copied from interface:DoubleKeyMap
Returns a set view of the map slice by the specified second keyk2
.Uses the constant number of ordinary map operations (
get
).- Specified by:
entrySetByKey2
in interfaceDoubleKeyMap<Key1,Key2,Value>
- Returns:
- a set view of the map slice by the second key
-
keys
@NotNull public java.util.Map<Key1,java.util.Set<Key2>> keys()
Description copied from interface:DoubleKeyMap
Returns all the keys of this map in a formkey1 -> {key2}
.Works in a linear time of map size.
Changes in the keys map do not reflect the changes in this map.
- Specified by:
keys
in interfaceDoubleKeyMap<Key1,Key2,Value>
- Returns:
- all map keys as a map
-
keySet1
@NotNull public java.util.Set<Key2> keySet1(@NotNull Key1 k1)
Description copied from interface:DoubleKeyMap
Returns the key set of the map slice by the specified first keyk1
.Uses the constant number of ordinary map operations (
get
).- Specified by:
keySet1
in interfaceDoubleKeyMap<Key1,Key2,Value>
- Parameters:
k1
- first key- Returns:
- key set of the map slice by the first key
-
keySet2
@NotNull public java.util.Set<Key1> keySet2(@NotNull Key2 k2)
Description copied from interface:DoubleKeyMap
Returns the key set of the map slice by the specified second keyk2
.Uses the constant number of ordinary map operations (
get
).- Specified by:
keySet2
in interfaceDoubleKeyMap<Key1,Key2,Value>
- Parameters:
k2
- second key- Returns:
- key set of the map slice by the second key
-
values
@NotNull public java.util.Collection<Value> values()
Description copied from interface:DoubleKeyMap
Returns a collection of values of this map. Result map can be empty, but nevernull
.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.
- Specified by:
values
in interfaceDoubleKeyMap<Key1,Key2,Value>
- Returns:
- all map values
-
valuesByKey1
@NotNull public java.util.Collection<Value> valuesByKey1(@NotNull Key1 k1)
Description copied from interface:DoubleKeyMap
Returns the values collection of the map slice by the specified first keyk1
. Result map can be empty, but nevernull
.Uses the constant number of ordinary map operations (
get
).- Specified by:
valuesByKey1
in interfaceDoubleKeyMap<Key1,Key2,Value>
- Parameters:
k1
- first key- Returns:
- values collection of the map slice by the first key
-
valuesByKey2
@NotNull public java.util.Collection<Value> valuesByKey2(@NotNull Key2 k2)
Description copied from interface:DoubleKeyMap
Returns the values collection of the map slice by the specified second keyk2
. Result map can be empty, but nevernull
.Uses the constant number of ordinary map operations (
get
).- Specified by:
valuesByKey2
in interfaceDoubleKeyMap<Key1,Key2,Value>
- Parameters:
k2
- second key- Returns:
- values collection of the map slice by the second key
-
remove
@Nullable public Value remove(@NotNull Key1 k1, @NotNull Key2 k2)
Description copied from interface:DoubleKeyMap
Removes the value from the map corresponding to the keys pair(k1, k2)
(if present).Uses the constant number of ordinary map operations (
get
,remove
).- Specified by:
remove
in interfaceDoubleKeyMap<Key1,Key2,Value>
- Parameters:
k1
- first keyk2
- second key- Returns:
- the previous value for the
(k1, k2)
pair, ornull
if it is not present
-
removeAllByKey1
@Nullable public java.util.Map<Key2,Value> removeAllByKey1(@NotNull Key1 k1)
Description copied from interface:DoubleKeyMap
Removes all values from the map corresponding to the first keyk1
(if present).Works in a linear time of the size of the returned map.
- Specified by:
removeAllByKey1
in interfaceDoubleKeyMap<Key1,Key2,Value>
- Parameters:
k1
- first key- Returns:
- the map slice by the first key
k1
present just before the removal (can benull
).
-
removeAllByKey2
@Nullable public java.util.Map<Key1,Value> removeAllByKey2(@NotNull Key2 k2)
Description copied from interface:DoubleKeyMap
Removes all values from the map corresponding to the second keyk2
(if present).Works in a linear time of the size of the returned map.
- Specified by:
removeAllByKey2
in interfaceDoubleKeyMap<Key1,Key2,Value>
- Parameters:
k2
- second key- Returns:
- the map slice by the second key
k2
present just before the removal (can benull
).
-
removeAll
public void removeAll(@NotNull java.util.Collection<Key1> keys1, @NotNull java.util.Collection<Key2> keys2)
Description copied from interface:DoubleKeyMap
Removes the whole sector covered by the key setskeys1
andkey2
). More precisely, this method removes all entries(k1, k2, v)
, for whichkeys1.contains(k1) && keys2.contains(k2)
.Time complexity is
O(n1) * O(n2)
, wheren1
andn2
are the sizes of the input collections.- Specified by:
removeAll
in interfaceDoubleKeyMap<Key1,Key2,Value>
- Parameters:
keys1
- the first keys collectionkeys2
- the second keys collection
-
clear
public void clear()
Description copied from interface:DoubleKeyMap
Clears the map. As a result of this call, the map size would be0
.Works in a linear time of the map size.
- Specified by:
clear
in interfaceDoubleKeyMap<Key1,Key2,Value>
-
recalculateSize
protected void recalculateSize()
-
-