码迷,mamicode.com
首页 > 其他好文 > 详细

hashcode和equals的理解

时间:2014-08-19 21:00:06      阅读:220      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   java   os   for   ar   2014   

属性值相等的两个对象,分别放进List和Set

Set集合:

两个对象的equals和hashcode都相等,才认为是同一个对象;

如果equals为false,则不管hashcode什么结果,Set size为2;

如果equals为true,只有当hashcode也相等,size才为1

所以要使得两个对象相等,必须同时重写equals和hashcode。

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

总结:

1、equals方法用于比较对象的内容是否相等(覆盖以后)

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

3、当覆盖了equals方法时,比较对象是否相等将通过覆盖后的equals方法进行比较(判断对象的内容是否相等)。

4、将对象放入到集合中时,首先判断要放入对象的hashcode值与集合中的任意一个元素的hashcode值是否相等,如果不相等直接将该对象放入集合中。如果hashcode值相等,然后再通过equals方法判断要放入对象与集合中的任意一个对象是否相等,如果equals判断不相等,直接将该元素放入到集合中,否则不放入。

5、将元素放入集合的流程图:

bubuko.com,布布扣

6、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;  
            }  
        }

  




hashcode和equals的理解,布布扣,bubuko.com

hashcode和equals的理解

标签:style   blog   http   java   os   for   ar   2014   

原文地址:http://my.oschina.net/freegeek/blog/304477

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!