如何防止hashmap或treemap替换以前的值

时间:2013-09-07 08:11:30

标签: java

如果已经存在,我怎么能阻止hashmap或treemap替换以前的键值呢?另外,我想抛出异常来通知用户。

5 个答案:

答案 0 :(得分:10)

说实话,任何此类地图都会违反正常的Map界面。但是如果您愿意这样做,您可以轻松地创建自己的Map实现,该实现委托给另一个地图,但只有在检查现有元素的存在之后:

public final class NonReplacementMap<K, V> implements Map<K, V> {
    private final Map<K, V> original;

    public NonReplacementMap(Map<K, V> original) {
        this.original = original;
    }

    @Override
    public void put(K key, V value) {
        if (original.containsKey(key)) {
            // Or whatever unchecked exception you want
            throw new IllegalStateException("Key already in map");
        }
        original.put(key, value);
    }

    // etc
}

答案 1 :(得分:3)

为什么不包装你的地图? Composition over inheritance

void put(Object key, Object value){
    if(map.containsKey(key)){
     throw Exception("Custom exception");
    }else{
    map.put(key,value);
    }
}

答案 2 :(得分:3)

使用myMap.putIfAbsent(key,val)

这是自1.8以来在Map接口中引入的

click

答案 3 :(得分:2)

您可以使用Map#containsKey(object)方法检查密钥是否已经存在,然后再将其添加到Map

答案 4 :(得分:0)

不,默认情况下你不能,因为它似乎对你有特殊要求。

因此,创建自己的类,扩展HashMap /任何实现和ovveride插入方法。

如果密钥与现有的return匹配/ throw某些exception