JavaSE(12)——Set集合

Set集合

1. 概述

Set集合主要有三个子类:

  • HashSet
    • 底层数据结构是哈希表+红黑树
  • TreeSet
    • 底层数据结构是红黑树
    • 保证元素的排序方式
  • LinkedHashSet
    • 底层数据结构由哈希表和双向链表组成

2. HashSet解析

2.1 继承结构图

HashSet继承结构

2.2 特征

  • 实现Set接口
  • 不保证迭代顺序
  • 允许元素为null
  • 底层实际上是一个HashMap实例
  • 非同步
  • 初始容量非常影响迭代性能

2.3 属性

//存储时用的map
private transient HashMap<E,Object> map;
//存储时用的虚拟value
private static final Object PRESENT = new Object();

2.4 方法

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

public boolean remove(Object o) {
    return map.remove(o)==PRESENT;
}

public boolean contains(Object o) {
    return map.containsKey(o);
}

public boolean remove(Object o) {
    return map.remove(o)==PRESENT;
}

2.5 总结

HashSet实际上就是封装了HashMap,操作HashSet元素实际上就是操作HashMap,这也是面向对象的一种体现,重用性高。

3. TreeSet解析

3.1 继承结构图

TreeSet继承结构

3.2 特征

  • 实现NavigableSet接口
  • 可以实现排序功能
  • 底层实际上是一个TreeMap实例
  • 非同步

4. LinkedHashSet解析

4.1 继承结构图

LinkedHashSet继承结构

4.2 特征

  • 迭代有序
  • 允许为null
  • 底层实际上是一个HashMap+双向链表 (LinkedHashMap)
  • 非同步
  • 性能比HashSet差一些,因为要维护双向链表
  • 初始容量和迭代无关 (参考LinkedHashMap)

5. 总结

  • HashSet
    • 无序,允许为null,底层是HashMap,非线程同步
  • TreeSet
    • 有序,不允许为null,底层是TreeMap,非线程同步
  • LinkedHashSet
    • 迭代有序,允许为null,底层是HashMap+双向链表,非线程同步
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值