简体   繁体   中英

hashMap in Java

I wanna do that: Method will be deleteLeafValue where it will get Object value. This will search all the sub hashMap values and clear all items where third value is Object value.

   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);
}

How can i do deleteLeafValue method?

Do you mean?

public void remove(K1 key1, K2 key2) {
    Map<K2, V> childMap = get(key2);
    if (childMap != null) 
       childMap.remove(key2);
}

or

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();
}

You might find using a composite key is simpler

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");

I don't think you should extend HashMap , you should manage an existing Map implementation from the outside:

Add the leaves

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);
}

Delete leaves by 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;
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM