???????????
??????????HashSet??HashMap????????????????????Java??????????????????????????????????????????HashSet?????????HashMap???????????????????????????HashMap??
????HashMap?????Map???????????null??????????δ?????????????Hashtable???????????TreeMap???????????????????????????????????????????????1?????????????????′???????????????????HashMap????????????
??????????????????????????????????????????????????????Open addressing?????????????????????Separate chaining with linked lists????Java HashMap?????????????????

????HashMap_base
????????????????????????????????????put()??get()????????????????????ɡ??????HashMap???е?????????????????table????????????????????????????????????????????HashMap??????С??????
?????????????????????HashMap????????????????inital capacity????????????load factor??????????????????table???С????????????????????????????????entry??????????capacity*load_factor????????????????????1???????????????????????????????????????????1?????????
?????????????HashMap??HashSet?????????????????????????hashCode()??equals()??hashCode()????????????????????bucket?????????????????????equals()????????????Щ?????????“????????”?????????????????????????HashMap??HashSet?У????@Override hashCode()??equals()??????
????????????
????get()

????get(Object key)?????????????key?????????value???÷?????????getEntry(Object key)????????entry???????entry.getValue()?????getEntry()??????????
??????????????????hash()??????????bucket???±???????α??????????????key.equals(k)???????ж?????????????entry??

?????????hash(k)&(table.length-1)?????hash(k)%table.length???????HashMap???table.length??????2??????????table.length-1????????λ???1????hash(k)????????????λ???????μ??????????
//getEntry()????
final Entry<K??V> getEntry(Object key) {
......
int hash = (key == null) ? 0 : hash(key);
for (Entry<K??V> e = table[hash&(table.length-1)];//??????????
e != null; e = e.next) {//???α???????????е????entry
Object k;
//????equals()?????ж???????
if (e.hash == hash &&
((k = e.key) == key || (key != null && key.equals(k))))
return e;
}
return null;
}
????put()
????put(K key?? V value)????????????key?? value??????map???÷?????????map????β????????????????飬????????????????????????????????getEntry()???????????????????????addEntry(int hash?? K key?? V value?? int bucketIndex)?????????μ?entry??????????巨??

HashMap_addEntry
//addEntry()
void addEntry(int hash?? K key?? V value?? int bucketIndex) {
if ((size >= threshold) && (null != table[bucketIndex])) {
resize(2 * table.length);//?????????????1??
hash = (null != key) ? hash(key) : 0;
bucketIndex = hash & (table.length-1);//hash%table.length
}
//????????????????μ?entry
Entry<K??V> e = table[bucketIndex];
table[bucketIndex] = new Entry<>(hash?? key?? value?? e);
size++;