Set集合:无序,不重复。该接口中的方法和Collection接口中的方法一致。
|--HashSet:底层哈希表数据结构,不同步的。它保证元素唯一性的方式:
根据元素的两个方法来完成的。一个是hashCode,一个是equals.
只有当hashCode方法算出的哈希值相同时,会再次判断两个元素的equals方法是否为true.
如果是true,说明两个元素相同,不存.
所以,往HashSet集合中存储自定义对象时,要覆盖hashCode,equals方法。
通过自定义对象自身具备的特有数据来定义hashCode,equals的具体实现。
|--TreeSet:用于给Set集合中的元素按照指定的顺序进行排序。底层是二叉树数据结构。线程是不同步的。
如何保证元素唯一性呢?
就是通过元素对象的比较方法返回值来确定的。如果为0,视两个元素为相同元素,不存。
排序方式一:
让元素自身具备比较功能,就是强制让元素去实现Comparable接口,覆盖compareTo方法。
这时元素具备的自然排序。
可是如果元素自身不具备比较功能,获取具备的比较功能不是所需要的。
这时排序方式一就用不了了。
排序方式二:
让集合自身具备比较功能,需要定义比较器,其实就是将实现了Comparator接口的子类对象作为
参数传递给TreeSet集合的构造函数。让TreeSet集合一创建就具备了比较功能。
该子类必须要覆盖compare方法。 |