Properties与HashTable----API分析

java.util
类 Properties

java.lang.Object
  继承者 java.util.Dictionary<K,V>
      继承者 java.util.Hashtable<Object,Object>
          继承者 java.util.Properties
所有已实现的接口:
Serializable, Cloneable, Map< Object, Object>
直接已知子类:
Provider


public class Properties
   
   
    
    extends 
    
    Hashtable<
    
    Object,
    
    Object>
   
   

Properties 类表示了一个持久的属性集。Properties 可保存在流中或从流中加载。属性列表中每个键及其对应值都是一个字符串。

一个属性列表可包含另一个属性列表作为它的“默认值”;如果未能在原有的属性列表中搜索到属性键,则搜索第二个属性列表。

因为 Properties 继承于 Hashtable,所以可对 Properties 对象应用putputAll 方法。但不建议使用这两个方法,因为它们允许调用者插入其键或值不是String 的项。相反,应该使用setProperty 方法。如果在“不安全”的Properties 对象(即包含非String 的键或值)上调用storesave 方法,则该调用将失败。类似地,如果在“不安全”的Properties 对象(即包含非String 的键)上调用propertyNameslist 方法,则该调用将失败。



setProperty

public Object setProperty(String key,
                          String value)
调用 Hashtable 的方法 put。使用 getProperty 方法提供并行性。强制要求为属性的键和值使用字符串。返回值是 Hashtable 调用 put 的结果。
参数:
key - 要置于属性列表中的键。
value - 对应于 key 的值。
返回:
属性列表中指定键的旧值,如果没有值,则为 null

load与setProperty最终通过Hashtable中put方法实现:


/**
     * Maps the specified <code>key</code> to the specified <code>value</code> in this hashtable. Neither the key nor the value
     * can be <code>null</code>.
     * <p>
     *
     * The value can be retrieved by calling the <code>get</code> method with a key that is equal to the original key.
     *
     * @param key
     *            the hashtable key
     * @param value
     *            the value
     * @return the previous value of the specified key in this hashtable, or <code>null</code> if it did not have one
     * @exception NullPointerException
     *                if the key or value is <code>null</code>
     * @see Object#equals(Object)
     * @see #get(Object)
     */
    public synchronized V put(K key, V value) {
        // Make sure the value is not null
        if (value == null) {
            throw new NullPointerException();
        }

        // Makes sure the key is not already in the hashtable.
        Entry tab[] = table;
        int hash = key.hashCode();
        int index = (hash & 0x7FFFFFFF) % tab.length;
        for (Entry<K, V> e = tab[index]; e != null; e = e.next) {
            if ((e.hash == hash) && e.key.equals(key)) {
                V old = e.value;
                e.value = value;
                return old;
            }
        }

        modCount++;
        if (count >= threshold) {
            // Rehash the table if the threshold is exceeded
            rehash();

            tab = table;
            index = (hash & 0x7FFFFFFF) % tab.length;
        }

        // Creates the new entry.
        Entry<K, V> e = tab[index];
        tab[index] = new Entry<K, V>(hash, key, value, e);//引用传递,改变了table的值
        count++;
        return null;
    }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值