java集合框架总结(三)

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 TreeSet treeSet = new TreeSet(new SetDemo());

注意:
1、外部比较器可以定义为一个工具类,此时所有需要比较的规则如果一致,可以复用
2、内部比较器只有在存储当前对象的时候才能使用
3、如果两者同时存在,听外部比较器的
4、当使用比较器的时候,不会调用equals方法

你可能感兴趣的:(java)