Catalogue
注意
本系列文章是笔者在参考了大量优秀文章的基础上的理解,由于水平有限,难免会出现错误,望批评指正,同时我也会把自己最新的理解及时更新到文章中去。最后,我会在文中注明参考文章,特别感谢这些无私奉献的作者。
理解完之前几篇关于 Java 集合的文章后,对于 Set 的理解就非常容易了。Set 是用于存储不重复元素的集合,常见的 Set 类集合由如下几种:
1、HashSet
2、TreeSet
3、LinkedHashSet
4、CopyOnWriteSet
前三种 Set 都是对各自对应的 Map 的封装,并以 key 为操作对象。
CopyOnWriteArraySet 则是对 CopyOnWriteArrayList 的封装,利用了 CopyOnWriteArrayList addIfAbsent 方法不重复添加元素的特性。
下面只以 HashSet 为例讲解,其它几个实现方式类似。
1 构造方法
1 | public HashSet() { |
前三个方法都是内部创建了一个 HashMap 对象,第四个方法创建的是 LinkedHashMap 对象,我想是为了方便 HashSet 拥有 LinkedHashSet 的能力而增加的构造方法吧。
2 add(E e)
1 | public boolean add(E e) { |
添加方法实际调用了 HashMap 的 put 方法,给它的 value 传入固定对象 PRESENT。这样就通过 HashMap 保证了传入值的唯一性(PS:其它的方法实现方式类似,自行去看源码吧)。
看完上面内容后,建议再看一下下面这篇文章,以加深对 Set 的理解.