Не думаю, что вы должны расширять HashMap
, вам нужно управлять существующей реализацией Map извне:
Добавить листья
public static <V, K1, K2> V put(final Map<K1, Map<K2, V>> outerMap,
final K1 outerKey,
final K2 innerKey,
final V value){
Map<K2, V> innerMap = outerMap.get(outerKey);
if(innerMap == null){
innerMap = new HashMap<K2, V>();
innerMap.put(innerKey, value);
outerMap.put(outerKey, innerMap);
return null;
}
return innerMap.put(innerKey, value);
}
Удалить листья по значению
/** Returns the number of deletions that were made */
public static <V, K1, K2> int deleteLeafValues(
final Map<K1, Map<K2, V>> outerMap,
final V value){
int deleted = 0;
for(final Map<K2, V> innerMap : outerMap.values()){
final Iterator<Entry<K2, V>> iterator =
innerMap.entrySet().iterator();
while(iterator.hasNext()){
if(iterator.next().getValue().equals(value)){
iterator.remove();
deleted++;
}
}
}
return deleted;
}