Class MultiKeyMap
- All Implemented Interfaces:
Serializable,Map,IterableMap
Map implementation that uses multiple keys to map the value.
This class is the most efficient way to uses multiple keys to map to a value.
The best way to use this class is via the additional map-style methods.
These provide get, containsKey, put and
remove for individual keys which operate without extra object creation.
The additional methods are the main interface of this map.
As such, you will not normally hold this map in a variable of type Map.
The normal map methods take in and return a MultiKey.
If you try to use put() with any other object type a
ClassCastException is thrown. If you try to use null as
the key in put() a NullPointerException is thrown.
This map is implemented as a decorator of a AbstractHashedMap which
enables extra behaviour to be added easily.
MultiKeyMap.decorate(new LinkedMap())creates an ordered map.MultiKeyMap.decorate(new LRUMap())creates an least recently used map.MultiKeyMap.decorate(new ReferenceMap())creates a garbage collector sensitive map.
IdentityMap and ReferenceIdentityMap are unsuitable
for use as the key comparison would work on the whole MultiKey, not the elements within.
As an example, consider a least recently used cache that uses a String airline code and a Locale to lookup the airline's name:
private MultiKeyMap cache = MultiKeyMap.decorate(new LRUMap(50));
public String getAirlineName(String code, String locale) {
String name = (String) cache.get(code, locale);
if (name == null) {
name = getAirlineNameFromDB(code, locale);
cache.put(code, locale, name);
}
return name;
}
Note that MultiKeyMap is not synchronized and is not thread-safe. If you wish to use this map from multiple threads concurrently, you must use appropriate synchronization. This class may throw exceptions when accessed by concurrent threads without synchronization.
- Since:
- Commons Collections 3.1
- See Also:
-
Nested Class Summary
-
Constructor Summary
ConstructorsConstructorDescriptionDeprecated.Constructs a new MultiKeyMap that decorates aHashedMap. -
Method Summary
Modifier and TypeMethodDescriptionvoidclear()Deprecated.clone()Deprecated.Clones the map without cloning the keys or values.booleancontainsKey(Object key) Deprecated.booleancontainsKey(Object key1, Object key2) Deprecated.Checks whether the map contains the specified multi-key.booleancontainsKey(Object key1, Object key2, Object key3) Deprecated.Checks whether the map contains the specified multi-key.booleancontainsKey(Object key1, Object key2, Object key3, Object key4) Deprecated.Checks whether the map contains the specified multi-key.booleanDeprecated.Checks whether the map contains the specified multi-key.booleancontainsValue(Object value) Deprecated.static MultiKeyMapDeprecated.Decorates the specified map to add the MultiKeyMap API and fast query.entrySet()Deprecated.booleanDeprecated.Deprecated.Deprecated.Gets the value mapped to the specified multi-key.Deprecated.Gets the value mapped to the specified multi-key.Deprecated.Gets the value mapped to the specified multi-key.Deprecated.Gets the value mapped to the specified multi-key.inthashCode()Deprecated.booleanisEmpty()Deprecated.keySet()Deprecated.Deprecated.Obtains aMapIteratorover the map.Deprecated.Puts the key and value into the map, where the key must be a non-null MultiKey object.Deprecated.Stores the value against the specified multi-key.Deprecated.Stores the value against the specified multi-key.Deprecated.Stores the value against the specified multi-key.Deprecated.Stores the value against the specified multi-key.voidDeprecated.Copies all of the keys and values from the specified map to this map.Deprecated.Deprecated.Removes the specified multi-key from this map.Deprecated.Removes the specified multi-key from this map.Deprecated.Removes the specified multi-key from this map.Deprecated.Removes the specified multi-key from this map.booleanDeprecated.Removes all mappings where the first key is that specified.booleanDeprecated.Removes all mappings where the first two keys are those specified.booleanDeprecated.Removes all mappings where the first three keys are those specified.booleanDeprecated.Removes all mappings where the first four keys are those specified.intsize()Deprecated.toString()Deprecated.values()Deprecated.Methods inherited from interface java.util.Map
compute, computeIfAbsent, computeIfPresent, forEach, getOrDefault, merge, putIfAbsent, replace, replace, replaceAll
-
Constructor Details
-
MultiKeyMap
public MultiKeyMap()Deprecated.Constructs a new MultiKeyMap that decorates aHashedMap.
-
-
Method Details
-
decorate
Deprecated.Decorates the specified map to add the MultiKeyMap API and fast query. The map must not be null and must be empty.- Parameters:
map- the map to decorate, not null- Throws:
IllegalArgumentException- if the map is null or not empty
-
get
Deprecated.Gets the value mapped to the specified multi-key.- Parameters:
key1- the first keykey2- the second key- Returns:
- the mapped value, null if no match
-
containsKey
Deprecated.Checks whether the map contains the specified multi-key.- Parameters:
key1- the first keykey2- the second key- Returns:
- true if the map contains the key
-
put
Deprecated.Stores the value against the specified multi-key.- Parameters:
key1- the first keykey2- the second keyvalue- the value to store- Returns:
- the value previously mapped to this combined key, null if none
-
remove
Deprecated.Removes the specified multi-key from this map. -
get
Deprecated.Gets the value mapped to the specified multi-key.- Parameters:
key1- the first keykey2- the second keykey3- the third key- Returns:
- the mapped value, null if no match
-
containsKey
Deprecated.Checks whether the map contains the specified multi-key.- Parameters:
key1- the first keykey2- the second keykey3- the third key- Returns:
- true if the map contains the key
-
put
Deprecated.Stores the value against the specified multi-key.- Parameters:
key1- the first keykey2- the second keykey3- the third keyvalue- the value to store- Returns:
- the value previously mapped to this combined key, null if none
-
remove
Deprecated.Removes the specified multi-key from this map.- Parameters:
key1- the first keykey2- the second keykey3- the third key- Returns:
- the value mapped to the removed key, null if key not in map
-
get
Deprecated.Gets the value mapped to the specified multi-key.- Parameters:
key1- the first keykey2- the second keykey3- the third keykey4- the fourth key- Returns:
- the mapped value, null if no match
-
containsKey
Deprecated.Checks whether the map contains the specified multi-key.- Parameters:
key1- the first keykey2- the second keykey3- the third keykey4- the fourth key- Returns:
- true if the map contains the key
-
put
Deprecated.Stores the value against the specified multi-key.- Parameters:
key1- the first keykey2- the second keykey3- the third keykey4- the fourth keyvalue- the value to store- Returns:
- the value previously mapped to this combined key, null if none
-
remove
Deprecated.Removes the specified multi-key from this map.- Parameters:
key1- the first keykey2- the second keykey3- the third keykey4- the fourth key- Returns:
- the value mapped to the removed key, null if key not in map
-
get
Deprecated.Gets the value mapped to the specified multi-key.- Parameters:
key1- the first keykey2- the second keykey3- the third keykey4- the fourth keykey5- the fifth key- Returns:
- the mapped value, null if no match
-
containsKey
Deprecated.Checks whether the map contains the specified multi-key.- Parameters:
key1- the first keykey2- the second keykey3- the third keykey4- the fourth keykey5- the fifth key- Returns:
- true if the map contains the key
-
put
Deprecated.Stores the value against the specified multi-key.- Parameters:
key1- the first keykey2- the second keykey3- the third keykey4- the fourth keykey5- the fifth keyvalue- the value to store- Returns:
- the value previously mapped to this combined key, null if none
-
remove
Deprecated.Removes the specified multi-key from this map.- Parameters:
key1- the first keykey2- the second keykey3- the third keykey4- the fourth keykey5- the fifth key- Returns:
- the value mapped to the removed key, null if key not in map
-
removeAll
Deprecated.Removes all mappings where the first key is that specified.This method removes all the mappings where the
MultiKeyhas one or more keys, and the first matches that specified.- Parameters:
key1- the first key- Returns:
- true if any elements were removed
-
removeAll
Deprecated.Removes all mappings where the first two keys are those specified.This method removes all the mappings where the
MultiKeyhas two or more keys, and the first two match those specified.- Parameters:
key1- the first keykey2- the second key- Returns:
- true if any elements were removed
-
removeAll
Deprecated.Removes all mappings where the first three keys are those specified.This method removes all the mappings where the
MultiKeyhas three or more keys, and the first three match those specified.- Parameters:
key1- the first keykey2- the second keykey3- the third key- Returns:
- true if any elements were removed
-
removeAll
Deprecated.Removes all mappings where the first four keys are those specified.This method removes all the mappings where the
MultiKeyhas four or more keys, and the first four match those specified.- Parameters:
key1- the first keykey2- the second keykey3- the third keykey4- the fourth key- Returns:
- true if any elements were removed
-
clone
Deprecated.Clones the map without cloning the keys or values.- Returns:
- a shallow clone
-
put
Deprecated.Puts the key and value into the map, where the key must be a non-null MultiKey object.- Specified by:
putin interfaceMap- Parameters:
key- the non-null MultiKey objectvalue- the value to store- Returns:
- the previous value for the key
- Throws:
NullPointerException- if the key is nullClassCastException- if the key is not a MultiKey
-
putAll
Deprecated.Copies all of the keys and values from the specified map to this map. Each key must be non-null and a MultiKey object.- Specified by:
putAllin interfaceMap- Parameters:
mapToCopy- to this map- Throws:
NullPointerException- if the mapToCopy or any key within is nullClassCastException- if any key in mapToCopy is not a MultiKey
-
mapIterator
Deprecated.Description copied from interface:IterableMapObtains aMapIteratorover the map.A map iterator is an efficient way of iterating over maps. There is no need to access the entry set or cast to Map Entry objects.
IterableMap map = new HashedMap(); MapIterator it = map.mapIterator(); while (it.hasNext()) { Object key = it.next(); Object value = it.getValue(); it.setValue("newValue"); }- Specified by:
mapIteratorin interfaceIterableMap- Returns:
- a map iterator
-
size
public int size()Deprecated. -
isEmpty
public boolean isEmpty()Deprecated. -
containsKey
Deprecated.- Specified by:
containsKeyin interfaceMap
-
containsValue
Deprecated.- Specified by:
containsValuein interfaceMap
-
get
Deprecated. -
remove
Deprecated. -
clear
public void clear()Deprecated. -
keySet
Deprecated. -
values
Deprecated. -
entrySet
Deprecated. -
equals
Deprecated. -
hashCode
public int hashCode()Deprecated. -
toString
Deprecated.
-