今天看了一下HashCode(http://www.cnblogs.com/dolphin0520/p/3681042.html),改变了我以往对HashCode 模糊的概念,下面来简单写一下个人对HashCode 的理解。
HashCode 生来就是为了配合一些散列集合而存在,比如HashSet HashMap HashTable。
他的存在,提高了查找和存储效率。
我们都知道,这些散列集合是不允许存在相同值的元素,所以在进行存储之前必须先判断是否已存在该元素,如果用equal() 一个一个的比较,则太耗时,我们得首先了解一下在put(K k,V v)时候的一些操作,首先计算k的hash,然后便利map,检测put 的hash 是否存在,如果不存在,则插入该元素,如果存在则进一步equal判断其value 是否相等,如果不等,则替换为新value。
源代码如下:
public V put(K var1, V var2) { if(var1 == null) { return this.putForNullKey(var2); } else { int var3 = hash(var1.hashCode()); int var4 = indexFor(var3, this.table.length); for(HashMap.Entry var5 = this.table[var4]; var5 != null; var5 = var5.next) { if(var5.hash == var3) { Object var6 = var5.key; if(var5.key == var1 || var1.equals(var6)) { Object var7 = var5.value; var5.value = var2; var5.recordAccess(this); return var7; } } } ++this.modCount; this.addEntry(var3, var1, var2, var4); return null; } }