HashSet、LinkedHashSet和TreeSet介绍
我们先认识一下框架图
HashSet
HashSet有以下特点
-
不能保证元素的排列顺序,顺序有可能发生变化
-
不是同步的
-
集合元素可以是null,但只能放入一个null
-
没有set和get方法 只能通过迭代器取值
当向HashSet结合中存入一个元素时,HashSet会调用该对象的hashCode()方法来得到该对象的hashCode值,然后根据 hashCode值来决定该对象在HashSet中存储位置。
HashSet集合判断两个元素相等的标准是着些判断俩个对象的hashCode值是否相等,第2步会调用equals方法比较相等,返回false,做add操作。
那为什么要同时判断equals方法和hashCode方法呢?问题一
而且还要先判断hashCode然后再判断equals方法? 问题二
问题一
关于同时判断equals方法和hashCode方法的必要性
因为存在“hashCode值不同,对象相同的情况,对象相同的情况,hashCode也不同的情况”; 哎,这个说法,怎么感觉有点不对呢? 不是之前都是这样认定的嘛“俩个对象的equals方法返回true,hashCode肯定相等;hashCode相等的俩个对象,equals方法返回不一定为true”其实红色的这句说法,确实是大家普便认为的,但这种情况如果是自定义对象,只重写了equals方法,或只重写了hashCode方