这个问题网上已经泛滥了,我把haspMap的put方法源码记下来,不用再争论了以后
由于java里的hashSet底层是用hashMap来实现的,所以只看hashMap的源码就OK了
public Object put(Object obj, Object obj1)
{
/* 370*/ if(obj == null)
/* 371*/ return putForNullKey(obj1);
/* 372*/ int i = hash(obj.hashCode());
/* 373*/ int j = indexFor(i, table.length);
/* 374*/ for(Entry entry = table[j]; entry != null; entry = entry.next)
{
Object obj2;
/* 376*/ if(entry.hash == i && ((obj2 = entry.key) == obj || obj.equals(obj2)))//先取hashCode值找位置,在做后续的==和equals判断
{
/* 377*/ Object obj3 = entry.value;
/* 378*/ entry.value = obj1;
/* 379*/ entry.recordAccess(this);
/* 380*/ return obj3;
}
}
/* 384*/ modCount++;
/* 385*/ addEntry(i, obj, obj1, j);
/* 386*/ return null;
}
void addEntry(int i, Object obj, Object obj1, int j)
{
/* 752*/ Entry entry = table[j];
/* 753*/ table[j] = new Entry(i, obj, obj1, entry);
/* 754*/ if(size++ >= threshold)
/* 755*/ resize(2 * table.length);
}