????????Set??hashCode()?????????????д??????????????Щ???????????????????????Set???????Щ?о????γ?????
??????Set????ó????У??????????????????洢???????????????洢???????????Щ??ó??????????????????????????????????????Set?????????????????????????????????????????????????????????????????????е?????????????洢??Set?е??????к??????????????????????????Set????value1???????Set?????е???????????value1????ж??????????????????????????????????????????????????????????ж?????????????????????????????е?????????Set??????洢?????????????????????????????????
???????????Set???????????????????????????????????????????????????????????????????????????л??????????????????Set??????У??????Map??key???????Set????????(?????????Map?е?key???)???????????????????
?????????Map?е?key????????????????????????key????????
??????????????????????java?????????????????????????Hash????????????????? ???Hash????????
????Hash????????????????Hash???????????????????????????????????????????????????????????????
?????????????????N?????????????????磺????????????????????????????????????????????е?????
??????????????????????????????????????O(N)???????????????N?Ρ?
????hash??????????????????hash??????????????????????????顣????????????????????????????hash??к????????????????????????????????????????????????????????????????????????????????????????????????±??????????????????????????????????У???????????????????????????????????????????????λ????????????hash??к????????????????????????????????????????????????
?????????????????O(1)??????????????????????????±?????????????????????????б???????????????
????????????????????????
???????????????????????????????????????????“????”????ɡ?????????????????????????????o???????????????????????????????????????????????????????????????????????????????????
????????????????????????????????????壬???????е????ɡ???????????????ж????xx??????′?xx????xx?????????????????????????
???????????hash???????????????????????
?????????HashMap?????????????HashMap????????Hash??????????key???????????????equals()???ж??????????д???????
????hash??
static int hash(int h) {
h ^= (h >>> 20) ^ (h >>> 12);
return h ^ (h >>> 7) ^ (h >>> 4);
}
put:
public V put(K key?? V value)  {
if (key == null)
return putForNullKey(value);
int hash = hash(key.hashCode());
int i = indexFor(hash?? table.length);
for (Entry<</SPAN>K??V> e = table[i]; e != null;e = e.next)  {
Object k;
if (e.hash == hash && ((k = e.key) == key || key.equals(k)))  {
V oldValue =e.value;
e.value =value;
e.recordAccess(this);
return oldValue;
}
}
modCount++;
addEntry(hash?? key?? value?? i);
return null;
}