????remove()
????remove(Object key)???????????key??????entry???÷???????????????removeEntryForKey(Object key)???????removeEntryForKey()?????????????key??????entry??????????entry??????????????????????????getEntry()?????????

//removeEntryForKey()
final Entry<K??V> removeEntryForKey(Object key) {
......
int hash = (key == null) ? 0 : hash(key);
int i = indexFor(hash?? table.length);//hash&(table.length-1)
Entry<K??V> prev = table[i];//??????????
Entry<K??V> e = prev;
while (e != null) {//???????????
Entry<K??V> next = e.next;
Object k;
if (e.hash == hash &&
((k = e.key) == key || (key != null && key.equals(k)))) {//?????????entry
modCount++; size--;
if (prev == e) table[i] = next;//??????????????????entry
else prev.next = next;
return e;
}
prev = e; e = next;
}
return e;
}
????HashSet
?????????????HashSet???HashMap??????????HashSet?????????????????????HashMap?????????HashSet?????????????в???300?д??????????????
//HashSet???HashMap??????
public class HashSet<E>
{
......
private transient HashMap<E??Object> map;//HashSet?????????HashMap
// Dummy value to associate with an Object in the backing Map
private static final Object PRESENT = new Object();
public HashSet() {
map = new HashMap<>();
}
......
public boolean add(E e) {//??????????
return map.put(e?? PRESENT)==null;
}
......
}