如何声明不允许更新或删除元素的最终HashMap

Man*_*noj 0 java collections hashmap

我有一个哈希映射,如,

public static void main(String[] args) {
    final Map<String, String> daysMap = new HashMap(7);
    daysMap.put("1", "Sunday");
    daysMap.put("2", "Monday");
    daysMap.put("3", "Tuesday");
    daysMap.put("4", "Wednesday");
    daysMap.put("5", "Thursday");
    daysMap.put("6", "Friday");
    daysMap.put("7", "Saturday");
}
Run Code Online (Sandbox Code Playgroud)

在此映射中
1.不应允许放置超过7个元素
2.不应更新相应键的值[如daysMap.put("5","xxx");]
3.不应允许删除任何键

怎么做?

Nic*_*las 5

第 2 点和第 3 点被 覆盖Collections.unmodifiableMap。为了涵盖第一点,您可以添加手写测试。


And*_*dré 5

您可以实现新的HashMap

public class CoolMap<K, V> extends HashMap<K, V> {

@Override
public V put(K key, V value) {

    if (size() == 7) {
        throw new IllegalStateException("Size is at max!");
    } else {

        // If there is something already with that key
        if (containsKey(value)) {
            // do nothing
            return value;
        } else {
            // put inside
            return super.put(key, value);
        }

    }

}

@Override
public void putAll(Map<? extends K, ? extends V> collection) {

    if (collection.size() > 7) {
        throw new IllegalStateException("Size is at max!");
    } else {
        super.putAll(collection);
    }

}

@Override
public V remove(Object key) {
    return null;// doesn't remove anything
}
Run Code Online (Sandbox Code Playgroud)