/**
-
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;}
(编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|