加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

HashTable源码分析

发布时间:2020-12-15 07:52:40 所属栏目:Java 来源:网络整理
导读:/** The hash table data. */ //存放键值对的数组 private transient Entry?,?[] table; /** The total number of entries in the hash table. */ //大小 private transient int count; /** The table is rehashed when its size exceeds this threshold. (T
/**

  • The hash table data.
    */
    //存放键值对的数组
    private transient Entry<?,?>[] table;

    /**

  • The total number of entries in the hash table.
    */
    //大小
    private transient int count;

    /**

  • The table is rehashed when its size exceeds this threshold. (The
  • value of this field is (int)(capacity * loadFactor).)
  • @serial
    */
    //阀值
    private int threshold;

    /**

  • The load factor for the hashtable.
  • @serial
    */
    //负载因子
    private float loadFactor;
    //默认初始容量为11,负载因子0.75
    public Hashtable() {
    this(11,0.75f);
    }

    //1.8版本没有修改,没有维护红黑树结构
    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;
    @SuppressWarnings("unchecked")
    Entry<K,V> entry = (Entry<K,V>)tab[index];
    for(; entry != null ; entry = entry.next) {
        if ((entry.hash == hash) && entry.key.equals(key)) {
            V old = entry.value;
            entry.value = value;
            return old;
        }
    }
    
    addEntry(hash,key,value,index);
    return null;

    }

    /**

  • Removes the key (and its corresponding value) from this
  • hashtable. This method does nothing if the key is not in the hashtable.
  • @param key the key that needs to be removed
  • @return the value to which the key had been mapped in this hashtable,
  • or <code>null</code> if the key did not have a mapping
  • @throws NullPointerException if the key is <code>null</code>
    */
    public synchronized V remove(Object key) {
    Entry<?,?> tab[] = table;
    int hash = key.hashCode();
    int index = (hash & 0x7FFFFFFF) % tab.length;br/>@SuppressWarnings("unchecked")Entry<K,V> e = (Entry<K,V>)tab[index];for(Entry<K,V> prev = null ; e != null ; prev = e,e = e.next) {if ((e.hash == hash) && e.key.equals(key)) {modCount++;if (prev != null) {prev.next = e.next;} else {tab[index] = e.next;}count--;V oldValue = e.value;e.value = null;return oldValue;}}return null;}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读