[英]hashMap in Java
我想這樣做:方法將是deleteLeafValue,它將在其中獲取對象值。 這將搜索所有子hashMap值,並清除第三個值為Object值的所有項目。
public void put(K1 key1, K2 key2, V value)
{
HashMap<K2, V> childMap = get(key2);
if (childMap == null)
{
childMap = new HashMap<K2, V>();
put(key1, childMap);
}
childMap.put(key2, value);
}
我該怎么辦deleteLeafValue方法?
你的意思是?
public void remove(K1 key1, K2 key2) {
Map<K2, V> childMap = get(key2);
if (childMap != null)
childMap.remove(key2);
}
要么
public void removeByValue(V value) {
for(Map<K2, V> childMap : values())
for(Iterator<V> valueIter = childMap.values(); valueIter.hasNext();)
if(valueIter.next().equals(value))
valueIter.remove();
}
您可能會發現使用復合鍵更簡單
Map<String, String> extendedMap = new HashMap<String, String>();
extendedMap.put("Row1/Column1", "French");
extendedMap.put ("Row1/Column2", "English");
extendedMap.put ("Row1/Column3", "Spanish");
extendedMap.put ("Row2/Column1", "John");
extendedMap.put ("Row2/Column2", "Richard");
extendedMap.put ("Row3/Column3", "Cole");
extendedMap.remove("Row3/Column3");
我不認為您應該擴展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;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.