本文原创地址,
我的博客
:https://jsbintask.cn/2019/03/27/jdk/jdk8-hashset/(食用效果最佳),转载请注明出处!
前言
前段时间朋友面试遇到这个问题:谈一谈HashSet的特点,它是怎么实现的,使用时有什么需要注意的点呢?恰好最近在写这方面的文章,于是正好通过本篇文章讲解下HashSet
的源码实现,需要注意的点。
HashSet
实现了Set
接口,是一个不能够存放重复元素的容器,内部直接使用HashMap
实现,即底层使用数组存储数据,HashSet没有任何同步手段,在多线程环境下需慎重考虑,可以使用Collections.synchronizedSet(new HashSet(...));
给原有的Set方法同步。
HashSet结构详解
类结构
关系图没有需要注意的点,HashSet
实现了Set
接口,Set是集合
的抽象概念,它内部不允许出现重复的元素。
类成员
前面我们已经说过,Set内部是不能够存在重复元素的,那HashSet内部是怎么做的呢?如图: