首先:集合Set是一个接口,实现它的类有那么几个,但有两个很重要:一个是HashSet,一个是TreeSet。
要问在Set集合中如何保证自定义类型对象的唯一性,那么一定要分情况说:
因为它们的底层数据结构不同:HashSet的底层数据结构是哈希表,TreeSet的底层数据结构是二叉树。
在HashSet集合中,是通过hashCode()方法与equals()方法共同作用来确定元素的唯一性的,当一个对象要进入HashSet集合中时,先判断hashCode()方法,
如果hashCode()的返回值不同,直接存入;如果相同,则继续判断equals()方法,如果equals()返回值不同,存入;如果相同,则认为重复,存不进去。
在TreeSet集合中,可以有两种方式确定元素的唯一性:一种是让要进入TreeSet的类型对象具备比较性,那么该类型变量实现Comparable接口,并复写compareTo()方法即可;一种是让集合具备比较性,可以定义一个类实现Comparator接口,并复写compare()方法,然后new一个该类对象作为参数传给TreeSet的构造函数即可。
|