HashSet源码分析

Java集合框架

  • Set接口概述
      • set接口特点
      • Set接口的特有方法
      • Set接口的遍历方式
      • Set接口的实现类:HashSet
      • 应用
  • HashSet源码
      • 重要的成员变量
      • 构造器
      • 其它构造器
      • 方法调用
  • 总结

Set接口概述

set接口特点

  • 不允许重复,至多有一个null
  • 无序(插入和取出的顺序不一致),没有索引

Set接口的特有方法

  • Set接口没有特殊方法,都是在Collection继承来的

Set接口的遍历方式

  • 和Collection的遍历方式相同

Set接口的实现类:HashSet

  • 底层结构:维护了一个HashMap对象,也就是和HashMap的底层一样,基于Hash表结构的
  • 如何实现去重:
    1、底层通过调用hashCode方法和equals方法实现去重
    2、过程:先调用hashCode,如果不相等,则直接可以添加,如果相等,则继续判断判断equals,如果不相等,可以添加,否则返回false。

应用

通过HashSet添加元素时,如果认为内容相等的为重复元素,则需要重写该元素的hashCode和equals方法

HashSet源码

重要的成员变量

HashSet源码分析_第1张图片
HashSet类维护了HashMap,所以底层也是基于Hash表,分析见HashMap源码分析。

构造器

HashSet源码分析_第2张图片

  • 空参构造器就是new了一个HashMap
  • 非空参构造器不仅new了一个HashMap还调用了父类的addAll()方法
  • 需要注意的是,HashMap初始量为16,0.75为其负载因子【用于超出扩大容量】

其它构造器

HashSet源码分析_第3张图片
HashSet源码分析_第4张图片

  • 其它构造器则是制定一些hashMap的容量大小,负载因子大小,是否需要映射关系等

方法调用

HashSet源码分析_第5张图片

  • 可以看到,方法都是调用的map的方法,所以,map的代码分析我们放在HashMap中分享。

总结

此篇用于介绍Set接口的一些特点,以及其实现类HashSet。

你可能感兴趣的:(Java集合(含源码分析))