在 Java 集合中,有一种集合框架叫 Set,应该很多人在日常开发中用到它。
先了解下 Set 的一些特性,然后看下源码:
- 不重复存储元素
- 元素排列无序
因为其是一个抽象的接口,所以不能直接实例化一个 set 对象。(Set s = new Set() 错误 )。该接口主要继承于Collections接口,所以具有Collection的一些常见的方法。
源码分析
1 | //Set是无序的,不是按照插入的顺序排列的,不允许重复 |
关于 HashSet,如果看下源码,就可以知道,其实实际使用的是 HashMap。而如果使用的是 TreeSet,通过源码,可以知道实际使用的是 TreeMap。
如何判断元素是否重复
HashSet 使用 hashCode 和 equals 方法。
注意:HashSet集合在判断元素是否相同先判断hashCode方法,如果相同才会判断equals。如果不相同,是不会调用equals方法的。
如果看源码,我们可以知道 HashSet 的 add() 方法,实际上调用的是 HashMap 的 put 方法。
通过我之前的一篇文章 Java集合框架 —— HashMap 中,可以了解 HashMap 的 put 方法的源码分析,这就符合上面的注意点了。