equals hashcode compareTo原理

equals hashcode compareTo原理

在讲原理之前,我们先看看三者在什么情况下使用:

容器:equals()

散列:hashcode() + equals()

有序:compareTo()  + equals()

容器:如ArrayList linkedList

散列:如HashSet HashMap

有序:如TreeSet TreeMap

好了,现在我们看看他们在代码中的应用。

ArrayList扩展了AbstractList,AbstractList中有public int indexOf(Object o)方法,该方法调用了equals()进行比较Object是否相等。

HashSet中有public boolean add(E e)方法,该方法调用HashMap的put方法,该方法执行int hash = hash(key.hashCode());和if (e.hash == hash && ((k = e.key) == key || key.equals(k))),实际上就是调用hashcode() + equals()一起比较Object是否相等。

TreeSet中有public boolean add(E e)方法,该方法调用TreeMap的put方法,该方法执行cmp = k.compareTo(t.key);比较两个对象的大小;还有public  boolean addAll(Collection<? extends E> c)方法,该方法不但调用compareTo()方法,而且调用了equals()方法。

通过对源代码的分析,我们可知:一般类型容器只需要实现equals()方法;如果是散列类型容器,需要实现hashcode() 和equals();如果是有序类型容器,需要实现compareTo() 和equals();如果是散列有序类型容器,需要实现compareTo()、hashcode() 和equals((),但是目前我还没有发现有这种类型。

相关资料还可参考:

关于重写equals,hashcode以及compareTo方法!:http://blog.csdn.net/bastengao/article/details/4064458


粗浅理解,还望同学们指正。

欢迎阅读相关文章: http://hi.csdn.net/linchengzhi
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值