java集合类之HashSet
概述
工作的过程中有用过HashSet,由于之前对这一块并没有深入到源码研究,因此对于内部的构造一直是不清楚,趁着研究Java其他的集合类型,我也顺便翻了 一下HashSet的源码,结果发现真是魔幻啊,HashSet底层居然是HashMap实现的,以前还真没有留意。
详解
首先还是来看一下HashSet对应的类图:

如上为对应的HashSet的类图,同LinkedList以及hashMap类似,其也是大量使用了模板的模式:
- 接口定义方法
- 抽象类定义公共实现
- 具体的类来定义特性的实现
HashMap的精髓并不在于源码的分析,而在于底层的实现,具体点就是底层采用了HashMap做了相关的实现:
1 | private transient HashMap<E,Object> map; |
如上所见,HashSet中定义了一个HashMap,我们使用的是HashMap的key来存放我们需要存放到HashMap中的元素,而对应的value其实是PRESENT。
至于HashSet如何解决Hash冲突,如何维护底层的元素,则可以通过之前的HashMap的分析来了解,这里就不再赘述了。