#Set集合
一、集合框架Set(HashSet哈希表存储、重复元素存储底层探究) 1.HashSet : jdk1.8以前是无序的,之后就是有序的 2.HashSet的底层数据结构是哈希表 3.确保元素唯一性的两个方法,hashCode()和equals()方法。 4.当调用add()方法向集合中存入对象的时候,先比较此对象与原有对象的哈希值有没有一样的,如果都不一样就直接存入;如果有与之相同的哈希值,则要继续比较这两个对象是否为同一个对象,此时就要调用对象的equals()方法了。
结论:只有HashCode的值相同的时候,才会调用equals()方法。
2、集合框架TreeSet(自然排序、数据结构二叉树、比较器排序 2.1、TreeSet自然排序 <TreeSet又称为红黑树> TreeSet可以对set集合中元素进行排序 使得添加的元素自身具备排序规则,这种排序规则又被称为自然排序 比较器排序(Comparator): 作用:使得容器具有比较性
其他引用数据类型没有实现Comparable接口,那么会出现java.lang.ClassCastException: com.javaxl.Peroon cannot be cast to java.lang.Comparable,实现引用数据类型实现此接口就没问题了。 注意:排序时,当主要条件相同时,一定要判断次要条件 2.2、TreeSet数据结构(二叉树) 1.可以对set集合进行排序,底层数据结构是二叉树; 2.保证元素唯一性的依据是,compareTo方法return 0 Comparable接口的用途? 使添加的元素自身具备排序规则,这种排序规则又被称为自然排序: 当给对象赋予自然排序规则的时候必须按照一下规则来,先判断主要条件,再判断次要条件 (先按年龄,再按姓氏)可以对set集合进行排序,底层数据结构是二叉树;
保证元素唯一性的依据是,compareTo方法return 0 所以 注意:TreeSet排序的第一种方式,让元素自身具有比较性; 元素需要实现Comparable接口,覆盖compareTo方法; 这种方式也被称为元素的自然顺序,或者叫做默认顺序。 那么如何让TreeSet集合中的元素怎么存进去怎么取出来呢? compareTo方法返回值为正数,返回值写死,那么就是怎么存进去怎么取出来。 compareTo方法返回值为负数数,返回值写死,那么就是先进后出。 TreeSet比较器排序 TreeSet排序的第二种方式 当元素自身不具备比较性时,或者具备的比较性不是所需要的; 注意:这时需要让集合自身具备比较性 在集合初始化时,就有了比较方式;