Set集合是无序的(存储顺序和取出顺序不一致),元素是不能够出现重复的,具有唯一性。它的实现类有:
HashSet
- 概述
- 不能保证取出顺序
- 特别是它不保证顺序恒久不变,顺序具有随机性
- HashSet集合是如何保证元素的唯一性
- 基于哈希表(元素是链表数组)实现
- 哈希表依赖于元素的哈希值存储
- 保证唯一性依赖两个方法
- int hashCode()
- boolean equals(Object ob)
- 实现的步骤:
首先比较哈希值是否和已存储元素的哈希值相同,相同继续执行equals方法,如果返回true,说明该元素已被添加,取消添加;否则说明该元素没有被添加,则将该元素添加到集合当中。 - 存储自定义对象
- 在Set集合存储自定义对象,同时保证元素的唯一性。
- 要求:如果两个元素的成员变量都是相同的,则判定为同一元素。
- Set集合保证元素的唯一性依赖的是hashCode和equals方法,但是自定义对象没有重写,所以只能调用Object中的hashCode和equals方法,就算该元素的成员变量和集合中某个元素的成员变量都是相同的,它们的哈希值也是不一致的,所以判定该元素未被添加,并执行添加操作。为了达到自定义对象在Set集合中的唯一性,我们必须在自定义对象的类中重写hashCode()和equals()这两个方法就可以了。
LinkedHashSet
- 概述
- 基于哈希表和链表实现
- 由链表来保证元素的顺序(先进先出)
- 由哈希表来保证元素的唯一性
TreeSet
-概述