hashcode和equals的理解

屬性值相等的兩個對象,分別放進List和Set
java

Set集合:this

兩個對象的equals和hashcode都相等,才認爲是同一個對象;spa

若是equals爲false,則無論hashcode什麼結果,Set size爲2;.net

若是equals爲true,只有當hashcode也相等,size才爲1code

因此要使得兩個對象相等,必須同時重寫equals和hashcode。對象

http://blog.csdn.net/afgasdg/article/details/6889383blog

總結:hash

一、equals方法用於比較對象的內容是否相等(覆蓋之後)table

二、hashcode方法只有在集合中用到class

三、當覆蓋了equals方法時,比較對象是否相等將經過覆蓋後的equals方法進行比較(判斷對象的內容是否相等)。

四、將對象放入到集合中時,首先判斷要放入對象的hashcode值與集合中的任意一個元素的hashcode值是否相等,若是不相等直接將該對象放入集合中。若是hashcode值相等,而後再經過equals方法判斷要放入對象與集合中的任意一個對象是否相等,若是equals判斷不相等,直接將該元素放入到集合中,不然不放入。

五、將元素放入集合的流程圖:

六、HashSet中add方法源代碼:

public boolean add(E e) {  
    return map.put(e, PRESENT)==null;  
    }

map.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<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;  
            }  
        }
相關文章
相關標籤/搜索