Link接口总结完了,接下来是set接口
Set接口
特征:
– Set接口存储一组唯一,无序的对象
– (存入和取出的顺序丌一定一致)
– 操作数据的方法不List类似,Set接口丌存在get()方法
– 不可以通过下标获取对应位置的元素值,因为无序
实现类:
1、HashSet:
-采用Hashtable哈希表存储结构
–优点:添加速度快,查询速度快,删除速度快
–缺点:无序
2、LinkedHashSet
▪ 采用哈希表存储结构,同时使用链表维护次序
▪有序(添加顺序)
3、TreeSet
–采用二叉树(红黑树)的存储结构
–优点:有序(排序后的升序)查询速度比List快
–缺点:查询速度没有HashSet快
HashSet
首先是说一下hash表,根据定义:是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。
hashSet操作:
1、每次写hash表的时候都需要重新定义equals和hashcode,来确保表中的同一对象唯一,设置元素的时候,如果是自定义对象,会查找对象中的equals和hashcode的方法,如果没有,比较的是地址。
2、 HashSet是如何保证元素的唯一性的呢?
答:是通过元素的两个方法,hashCode和equals方法来完成
如果元素的HashCode值相同,才会判断equals是否为true
如果元素的hashCode值丌同,丌会调用equals方法
TreeSet
定义:
它是由_n(n>=1_)个有限结点组成一个具有层次关系的集合,把它叫做“树”是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。它具有以下的特点:每个结点有零个或多个子结点;没有父结点的结点称为根结点,每一个非根结点有且只有一个父结点;除了根结点外,每个子结点可以分为多个不相交的子树。
特征:
– 采用二叉树(红黑树)的存储结构(树的接口可以参考数据结构书,这里不作详细解释)
– 优点:有序(排序后的升序)查询速度比List快
– 缺点:查询速度没有HashSet快
排序接口与方法
1、Comparator
java.util.Comparator 接口的实现类可以传递给sort方法(如Collections.sort或Arrays.sort)
Comparator接口中包含一个int compare(T o1,T o2)用来比较排序的两个参数(重写)
如果o1
如果o1=o2,返回0
如果o1>o2,返回正整数
2、Comparable接口
上面的算法根据什么确定集合中对象的“大小”顺序?
• 所有可以“排序”的类都实现了java.lang.Comparable 接口,
Comparable接口中只有一个方法public int compareTo(Object obj);
该方法:
返回正数 this > obj
返回复数 this < obj
返回 0 this == obj
实现了Comparable 接口的类通过实现 comparaTo 方法从而确定该类对象的排序方式,如果返回正数,this排在obj的后面
比较器的分类(确定位置):内部比较器 定义在元素的类中,通过comparable接口来实现
外部比较器 定义在当前类中,通过实现comparator接口来实现,但是要将该比较器传递到集合中外部比较器实现语法:
public class SetDemo implements Comparator TreeSet treeSet = new TreeSet(new SetDemo());
注意:
1、外部比较器可以定义为一个工具类,此时所有需要比较的规则如果一致,可以复用
2、内部比较器只有在存储当前对象的时候才能使用
3、如果两者同时存在,听外部比较器的
4、当使用比较器的时候,不会调用equals方法