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

bei*_*man 3 java

如果已经存在,我如何防止hashmap或treemap替换先前的键值呢?另外,我想抛出异常来通知用户.

Jon*_*eet 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
}
Run Code Online (Sandbox Code Playgroud)

  • 它就在那里[在文档中](http://bit.ly/17HOd9G):`如果地图以前包含键的映射,则旧值将被指定的值替换. (2认同)

jus*_*Guy 7

使用 myMap.putIfAbsent(key, val)

这是从 1.8 版本开始在 Map 接口中引入的

     * @since 1.8
     */
     default V putIfAbsent(K key, V value) {
Run Code Online (Sandbox Code Playgroud)