Set集合的特点(HashSet对集合的迭代顺序不作任何保证)
不包含重复的元素
没有带索引的方法,所以不能使用普通for遍历
哈希值
是JDK根据对象的地址或者字符串或者数字算出来的int类型的数值
Object类中有一个方法可以获取对象的哈希值:
public int hashCode();
哈希值的特点:
同一个对象多次调用hashCode方法返回的哈希值是相同的
默认情况下,不同对象的哈希值是不相同的
通过方法重写,可以实现不同对象的哈希值是相同的
HashSet不能存储重复元素理论:
当存储元素时,会首先调用其hashCode方法,会根据hashCode方法去判断到底应该存储在数组上的那个位置上,如果这个位置上没有元素,那么直接存储,如果有元素,则进行equals方法比较,如果equals比较结果相同,就不存储,如果不同则挂在数组上
Hash冲突
指的是不同的hashCode值所对应的元素索引在数组中一样
hash冲突算法:就是为了解决hash冲突
LinkedHashSet集合
特点:有序,不可重复
TreeSet集合
特点:
元素有序,这里的顺序不是指存储和取出的顺序,二十按照一定的规则进行排序,句体排序方式取决于构造方法
TreeSet():根据其元素的自然排序进行排序
TreeSet(Comparator comparator):根据制定的比较器进行排序
没有带索引的方法,所以不宁使用普通for循环遍历
由于是Set集合,所以不包含重复元素的集合
|
|