1、 Set体系特点: 元素唯一,无序,无索引
遍历方式:可以使用迭代器,可以使用增强for。
Collection体系 -- 在AbstractCollection这个抽象类中重写的toString()
2、HashSet
结论:HashSet保证元素的唯一性,依赖于元素所属类的hashCode() 和 equals() 方法。
分析:
元素添加到HashSet集合,先走hashCode(),
如果发现哈希值不一样,元素不重复,直接添加到集合了。
如果发现哈希值一样,再去走equals方法,比较具体的属性值。
如果equals返回了true,元素重复不添加。
如果equals放回false,元素不重复,添加到集合。
注意事项:
1)、工具生成hashCode()方法的理解:尽量让具有不同属性值的对象,返回不同的哈希值,提高效率。
如果自己重写:
把所有成员变量的哈希值相加返回即可,引用数据调hashCode方法,基本数据用值。
2)、工具生成equals()方法,有提高程序效率和增加程序健壮性的判断。
如果自己重写 -- 三步:
为了提高效率 -- 判断传递进来的对象与调用方法的对象是否是同一个(地址值一样)
为了程序的健壮性 -- 判断传递进来的对象与调用方法的对象是否是同一个类的实例。
向下转型,比较具体的属性值。
3、 LinkedHashSet
保证元素唯一,且保证存取顺序(迭代顺序),数据结构依赖链表和哈希表
4、 TreeSet
TreeSet可以保证元素唯一,且能实现对元素排序。
TreeSet实现排序的方式1:
自然排序 -- 让元素具备比较性:
元素所属类实现Comparable接口,重写compareTo()方法。
根据compareTo()返回值:
返回0,元素重复,不添加。
返回正数,元素往后放。
返回负数,元素往前放。
元素取出的时候,自根节点开始,按照每个节点的左中右原则取出的。
方式2:
比较器顺序 -- 让集合具备比较性
自定义类实现Comparator接口,重写compare()方法,然后将Comparator的子类对象传递到TreeSet的构造方法。
可以采用匿名内部类的方式。
注意:
1)、分析排序条件的主次
2)、键盘录入需要自定义结束标记。
3)、如果两种排序方式都有,以比较器顺序优先。
|
|