Java集合 之 如何动态控制HashMap

本文章主要是控制HashMap权限如:设置一把锁(这里实现是通过一个布尔值locked)目的是想控制HashMap是否可以添加数据?是否可以清除数据?是否可以复制所有数据给另外一个HashMap? 如果布尔值为true,那么以上的操作都会报出异常。。。。

 

该类的名字叫做ParameterMap,它继承了HashMap类

 

请看下面的代码:

代码就不需要解释,因为里面已经解释的很详细,读者自己可以运行该程序。。。。

package ex09.pyrmont.startup;


import java.util.HashMap;
import java.util.Map;


/**
 *第一次创建ParmaterMap实例是没有锁。
 *该类继承了HashMap,包含了一个locked成员变量
 * @author Jerry
 */

public final class LockedMap extends HashMap {

    // ----------------------------------------------------------- 构造函数
    /**
     * 构造一个新的map,容量是默认值,加载因子也是默认值
     */
    public LockedMap() {

        super();

    }

    /**
     * 构造一个新的map,容量值是一个具体的初始容量,加载因子是默认值
     * 
     * @param initialCapacity 这个map的初始容量
     */
    public LockedMap(int initialCapacity) {

        super(initialCapacity);

    }


    /**
     * 构造一个新的map,容量值是一个具体的初始容量,加载因子是loadeFactor
     * 
     * @param initialCapacity 这个map的初始容量
     * @param loadFactor 这个map的加载因子
     */
    public LockedMap(int initialCapacity, float loadFactor) {

        super(initialCapacity, loadFactor);

    }


    /**
     * 复制一个map,给新的map
     * 
     * @param map Map的类容复制到新的Map中
     */
    public LockedMap(Map map) {

        super(map);

    }


    // ------------------------------------------------------------- 类的成员变量


    /**
     * 这个Map当前锁的状态
     */
    private boolean locked = false;

    //------------------------------------------------------------get和set方法
    
    /**
     * Return 这个map锁的状态.
     */
    public boolean isLocked() {

        return (this.locked);

    }


    /**
     * 设置这个map锁的状态
     *
     * @param locked 一个新锁的状态
     */
    public void setLocked(boolean locked) {

        this.locked = locked;

    }



    // --------------------------------------------------------- Public Methods



    /**
     * 移除这个map的所有键值对.
     *
     * @exception IllegalStateException 如果这个Map被锁住
     */
    public void clear() {

        if (locked)
            throw new IllegalStateException
                ("LockedMap.locked");
        super.clear();

    }


    /**
     * 在这个Map中具体的值与具体的键相关联。如果Map里面种包含了这个key,那么旧值就会被
     * 替换
     * 
     * @param key Key是与具体的值相关联
     * @param value 值必须与具体的key相关联
     *
     * @return 具体key与之关联的value
     *
     * @exception IllegalStateException 如果这个Map被锁住
     */
    public Object put(Object key, Object value) {

        if (locked)
            throw new IllegalStateException
                ("LockedMap.locked");
        return (super.put(key, value));

    }


    /**
     * 把指定的map中的所有键值对复制到这个map中
     * 
     * @param map 所有的键值对存放在这个map中
     *
     * @exception IllegalStateException 如果这个Map被锁住
     */
    public void putAll(Map map) {

        if (locked)
            throw new IllegalStateException
                ("LockedMap.locked");
        super.putAll(map);

    }


    /**
     * 如果存在就会移除key相关联的value值.
     *
     * @param key 
     *
     * @exception IllegalStateException 如果这个Map被锁住
     */
    public Object remove(Object key) {
        if (locked)
            throw new IllegalStateException
                ("LockedMap.locked");
        return (super.remove(key));

    }


}
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值