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快

留神这里有个Comparable接口
下面的算法依据什么确定汇合中对象的“大小”程序?
• 所有能够“排序”的类都实现了java.lang.Comparable 接口,
Comparable接口中只有一个办法

  public int compareTo(Object obj);   该办法:   返回负数 this > obj  返回复数 this < obj  返回 0   this == obj  

实现了Comparable 接口的类通过实现 comparaTo 办法从而确定
该类对象的排序形式。

比拟器的分类(确定地位):

外部比拟器 定义在元素的类中,通过comparable接口来实现内部比拟器 定义在以后类中,通过实现comparator接口来实现,然而要将该比拟器传递到汇合中
 public class SetDemo implements Comparator<Person> TreeSet treeSet = new TreeSet(new SetDemo());

留神:
1、内部比拟器能够定义为一个工具类,此时所有须要比拟的规定如果统一,能够复用
2、外部比拟器只有在存储以后对象的时候能力应用
3、如果两者同时存在,听内部比拟器的
4、当应用比拟器的时候,不会调用equals办法