【Java入门】数据结构(三)Set


首先,Collection的继承层次如下图:
在这里插入图片描述

Collection

Collection 是最基本的集合接口,一个 Collection 代表一组 Object,即 Collection 的元素。Java不提供直接继承自Collection的类,只提供继承于的子接口(如List和set)。

Collection 接口存储一组不唯一,无序的对象。

Colletion主要的方法:
在这里插入图片描述
这些方法就是集合的最基本的方法,其所有子类,包括所有的Set和List,需要继承或实现的方法。

Set

Set 直接继承Collection,且具有与 Collection 完全一样的接口,只是行为上不同,Set 不保存重复的元素。

Set 接口存储一组唯一,无序的对象。所以,TreeSet、LinkedSet、HashSet也都有这样的特点。

注:如果将可变对象用作 set 元素,那么必须极其小心。如果对象是 set 中某个元素,以一种影响 equals 比较的方式改变对象的值,那么 set 的行为就是不确定的。

TreeSet

该类实现了SortedSet接口,可以实现排序等功能。使用元素的自然顺序对元素进行排序,或者根据创建 set 时提供的 Comparator 进行排序,具体取决于使用的构造方法。

TreeSet的特点:(参考

  • 实现了NavigableSet接口,底层使用TreeMap来保存所有元素;
  • 线程不安全。可通过如下方式使用线程安全的操作: SortedSet s = Collections.synchronizedSortedSet(new TreeSet(...));
  • 能够确保集合元素处于排序状态,依赖于comparator。因此,当试图将一个对象添加到集合中时,该对象必须实现Comparable接口
  • 不允许null值
  • 底层使用红黑树数据结构。
  • fail-fast机制
    在创建迭代器之后,如果从结构上对 set 进行修改,除非通过迭代器自身的 remove 方法,否则在其他任何时间以任何方式进行修改都将导致迭代器抛出 ConcurrentModificationException。

构造方法
在这里插入图片描述
下面是TreeSet的跟Set比较新增的方法:(有部分余漏)
在这里插入图片描述
在这里插入图片描述
可以看出,主要是利用了TreeSet的有序,可以实现:最值处理、大小比较、范围截取等。

HashSet

此类实现 Set 接口,由 HashMap支持。它不保证 set 的迭代顺序;特别是它不保证该顺序恒久不变。此类允许使用 null 元素。

特点

  • 底层实现HashMap;
  • 不保证顺序
  • 不重复允许 null
  • 不是同步的,处理方法:Set s = Collections.synchronizedSet(new HashSet(...));
  • 此类的 iterator 方法返回的迭代器是快速失败的;
  • 进行迭代所需的时间与 HashSet 实例的大小(元素的数量)和底层 HashMap 实例(桶的数量)的“容量”的和成比例。因此,如果迭代性能很重要,则不要将初始容量设置得太高(或将加载因子设置得太低)。

构造方法:(调用了hashmap的几个构造方法,看源码分析!)
在这里插入图片描述

LinkedHashSet

HashSet的子类。具有可预知迭代顺序的 Set 接口的哈希表和链接列表实现。定义了迭代顺序,即按照将元素插入到 set 中的顺序(插入顺序)进行迭代。

常用于:生成一个与原来顺序相同的 set 副本,并且与原 set 的实现无关:Set copy = new LinkedHashSet(s);

特点

  • 继承了HashSet类;底层实现HashMap,数据结构是链表;
  • 保证顺序
  • 唯一允许 null
  • 有两个影响其性能的参数:初始容量 和 加载因子;
  • 不是同步的,处理方法:Set s = Collections.synchronizedSet(new LinkedHashSet(...));
  • 此类的 iterator 方法返回的迭代器是快速失败的;
  • 查找较慢插入删除较快

构造方法与HashSet一样。

与HashSet比较:由于增加了维护链接列表的开支,其性能很可能会比 HashSet 稍逊一筹,不过,这一点例外:LinkedHashSet 迭代所需时间与 set 的大小 成正比,而与容量无关。HashSet 迭代很可能支出较大,因为它所需迭代时间与其容量成正比。

原创文章 16 获赞 17 访问量 2124

猜你喜欢

转载自blog.csdn.net/weixin_42368748/article/details/104740934
今日推荐