1、hashCode:
hashCode所表示的内容是内存中的一个散列地址,是针对hash算法而产生的一个整型值,在java集合操作的时候,比如:HashSet这一不允许重复的集合中,没添加一个集合元素都会通过hash算法产生一个hashcode值,作为其在内存中存储的位置,当进行查找时就会通过这个算法产生的hashcode 值直接定位到内存中所在的位置,将内容取出。
2、equals:
equals方法是从Object类中继承了而来的,如果我们在用此方法比对两个自定义对象是否相等的时候不进行重写此方法,那么equals的比较结果就和 “==”相同,所以我们的自定义类如果有比较其实例是否相等的需求那么就需要重写此方法。
3、不允许重复的集合类如何判断元素是否相等
其实今天发表的这篇文章主要是为了引出此话题,至于为什么就不在这赘述了。
拿HashSet为例:
在我们学习此集合类的时候,可能授课教师只是说此集合类中的元素不能重复,并没有说是元素的内容不能重复还是元素的内存地址不能重复。
那么今天就来讲解一下HashSet是如何过滤掉重复值的。
HashSet的机制是为每一个添加到集合内的元素通过气hashCode方法获取到一个HashCode值,通过此HashCode值去定位到内存中所代表的区域,判断是否此区域内有值,如果没有则就不会去判断Equals方法,直接将此元素进行存储,如果有值则通过equals方法进行判断是否相等,如果不相等就为其分配另一个HashCode值并进行存储,反之则将此元素过滤掉。
这就是HashSet为什么能够自动过滤重复值的原因了,并且它可以大大较少判等的时间(如果我们只用equals方法的话,当集合中有1000个元素,当插入第1001个的时候,需要通过equals方法判断1000次)
不知以上内容有没有用,只是随笔而写,如与读者思想有悖敬请谅解,并希望能够给予智慧以便矫正。
阅读(1937) | 评论(0) | 转发(0) |