共计 1380 个字符,预计需要花费 4 分钟才能阅读完成。
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 办法