HashMap“WriteOnce”实现

时间:2011-01-10 07:44:46

标签: java hashmap

import java.util.*;
public class HashMapExample {

    public static class WriteOnceMap<K, V> extends HashMap<K, V> {

        public V put(K key, V value) {
            /*
             WriteOnceMap is a map that does not allow changing value for a particular key.
             It means that put() method should throw IllegalArgumentException if the key is already
             assosiated with some value in the map.

             Please implement this method to conform to the above description of WriteOnceMap.
            */
        }


        public void putAll(Map<? extends K, ? extends V> m) {
            /*
             Pleaase implement this method to conform to the description of WriteOnceMap above.
             It should either
             (1) copy all of the mappings from the specified map to this map or
             (2) throw IllegalArgumentException and leave this map intact
             if the parameter already contains some keys from this map.
            */
        }
    }
}

2 个答案:

答案 0 :(得分:3)

public static class WriteOnceMap<K, V> extends HashMap<K, V> {
    public V put(K key, V value) {
        if (containsKey(key))
            throw new IllegalArgumentException(key + " already in map");

        return super.put(key, value);
    }


    public void putAll(Map<? extends K, ? extends V> m) {
        for (K key : m.keySet())
            if (containsKey(key))
                throw new IllegalArgumentException(key + " already in map");

        super.putAll(m);
    }
}

答案 1 :(得分:1)

1:包裹HashMap。

2:或使用:java.util.Collections.unmodifiableMap(Map<? extends K, ? extends V>)

如果这是家庭作业,那么dacwe是对的。