先说HashSet
HashSet集合的底层结构是一个哈希表数据结构 ,无序(存进去和取出来的顺序是不一致的),不可以存入重复的元素, 存入HashSet集合的元素(对象)需要覆盖hashCode()方法和equals()方法。
HashSet是如何保证元素的唯一性的呢?
是通过元素的两个方法 hashCode() 和equals() 方法。
如果元素的hashCode()相同,才会判断equals是否为true;
如果元素的hashCode()不同,直接存入到HashSet集合,则不会调用equals方法。
HashSet对于判断元素是否存在,以及删除等操作,依赖的是也是hashCode和equals方法。
再说TreeSet:
TreeSet底层的数据结构是二叉树数据结构 不可有重复元素, TreeSet集合取出是有序的 ,之所以有序是因为TreeSet有两种排序方式。
TreeSet排序的第一种方式:让存入TreeSeet集合的元素自身具备比较性。
元素需要实现Comparable接口,覆盖CompareTo方法。
这种方式也称为元素的自然顺序。或者叫做默认顺序。
ThreeSet的第二种排序方式。
当元素自然不具备比较性时,或者具备的比较性不是所需要的。
这时就需要让集合自身具备比较性。
定义一个比较器类 将比较器对象作为参数传递给TreeSet集合的构造函数。
当两种排序方式都存在时 ,以比较器方式为主。
定义一个类,实现Comparator接口 覆盖compare方法。
完毕 |