set集合中的对象不按照特定的方式排序,只是简单的吧对象加入集合之中,但是set集合不能包含重复对象。set集合由set接口和set接口实现类组成,set接口继承了collection接口所有方法。
注意,set只有一个约束条件,就是不能存在重复对象
Set常用集合:
Set中方法与Collection一致。
(1)HashSet:内部数据结构是哈希表,是不同步的。
Set集合中元素都必须是唯一的,HashSet作为其子类也需保证元素的唯一性。
判断元素唯一性的方式:
通过存储对象(元素)的hashCode和equals方法来完成对象唯一性的。
如果对象的hashCode值不同,那么不用调用equals方法就会将对象直接存储到集合中;
如果对象的hashCode值相同,那么需调用equals方法判断返回值是否为true,
若为false, 则视为不同元素,就会直接存储;
若为true, 则视为相同元素,不会存储。
PS:如果要使用HashSet集合存储元素,该元素的类必须覆盖hashCode方法和equals方法。
一般情况下,如果定义的类会产生很多对象,通常都需要覆盖equals,hashCode方法。建立对象判断是否相同的依据。
(2)TreeSet:保证元素唯一性的同时可以对内部元素进行排序,是不同步的。
判断元素唯一性的方式:
根据比较方法的返回结果是否为0,如果为0视为相同元素,不存;如果非0视为不同元素,则存。
TreeSet对元素的排序有两种方式:
方式一:使元素(对象)对应的类实现Comparable接口,覆盖compareTo方法。这样元素自身具有比较功能。
方式二:使TreeSet集合自身具有比较功能,定义一个类实现Comparable接口覆盖其compareTo方法。(相当于自定义了一个比较器)
将该类对象作为参数传递给TreeSet集合的构造函数。(TreeSet(Comparator<? super E> c) )