Set

Set

set是一个不包含重复元素的collection。更正式的说,set不包含满足e1.equals(e2)的元素e1和e2,并且最多包哈一个null元素。

需要注意的是如果把一个可变对象置于一个set中,随着可变对象的变化,可能导致set中存在有两个相同的对象(如:2个WeakHashMap对象,随着时间推移都会变为空对象),这样就违反了set的初始定义。所以我们至少是不允许一个set作为另外一个set的元素的。

AbstractSet

是set的骨干实现类,实现了equals、hashCode和removeAll方法。

HashSet

由哈希表(HashMap)支持。它不保证集合的迭代顺序;特别是它不保证该顺序永恒不变。此类允许使用努力了元素。

    public boolean add(E e) {
        return map.put(e, PRESENT)==null;
    }


可见,在处理是所有的元素保存在hashMap的key上,同时利用了hashMap中key不可重复的特性。 PRESENT是一个final的空对象。

有一个包权限的构造器

    HashSet(int initialCapacity, float loadFactor, boolean dummy) {
        map = new LinkedHashMap<>(initialCapacity, loadFactor);
    }


在HashSet中未使用,但是这个构造器是为了LinkedHashSet提供的。

LinkedHashSet

继承HashSet,利用LinkedHashMap提供的key的双链表,来保证key的顺序。从而保证了set元素的顺序。

SortSet

该set声明了一个比较器,为元素排序提供支持。并提供了几个常用的排序方法。如:最大的、最小的、或是大于或小于某个元素。

navigableSet

在java6以后新增了这个接口,字面意思为导航set。在SortSet的基础上进一步封装了一些常用的方法。有比较大小的,有返回最大、最小值的等。

TreeSet

实现了NavigableSet接口。并采用TreeMap来实现其数据结构。保证了元素按照比较器比较顺序来排列。

EnumSet

与枚举类型一起使用的专用 Set 实现。枚举 set 中所有键都必须来自单个枚举类型,该枚举类型在创建 set 时显式或隐式地指定。枚举 set 在内部表示为位向量。此表示形式非常紧凑且高效。此类的空间和时间性能应该很好,足以用作传统上基于 int 的“位标志”的替换形式,具有高品质、类型安全的优势。如果指定的 collection 也是一个枚举 set,则批量操作(如 containsAll 和 retainAll)也应运行得非常快。

采用

final Enum[] universe;

的数据结构。

RegularEnumSet

EnumSet的具体实现类,主要为元素不大于64的枚举服务。提供常见的Set方法。

JumboEnumSet

EnumSet的具体实现类,主要为元素大于64的枚举服务。提供常见的Set方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值