常用的三大类集合:Set、List、Map。
1 Set
1) Set 集合属于单列集合,不允许包含重复元素;
2) 判断元素是否重复的标准为对象的 equals 方法,存在时返回 false,不存在返回 true;
3) 元素的排序规则,由相应的实现类决定,分为无序、元素大小排序、写入顺序排序;
4) 初始化大小,扩容参考 HashMap。
1.1 Set 接口、实现类:
名称 | 类型 | 线程同步 | 描述 |
Set | 接口 | 继承了Collection接口 | |
SortedSet | 接口 | 继承了Set接口 | |
HashSet | 实现类 | 不同步 | 继承了AbstractSet类,实现了Set、Cloneable、Serializable接口 |
TreeSet | 实现类 | 不同步 | 继承了AbstractSet类,实现了NavigableSet(继承了SortedSet)、Cloneable、Serializable接口 |
LinkedHashSet | 实现类 | 不同步 | 继承了HashSet类,实现了Set、Cloneable、Serializable接口 |
1.2 HashSet
1) HashSet 实现了 Set 接口,继承了 AbstractSet 类,由哈希表支持,看源码可以发现是一个 HashMap 实例。
2) HashSet 不保证集合内元素的迭代顺序,特别是不保证迭代顺序永久不变,该集合运行 null 元素存在。
3) HashSet 中的元素,作为 HashMap 键值对的 Key 存储,而 Value 由一个统一的值保存。
4) HashSet 默认初始化大小为 16,扩容加载因子为 0.75,扩容大小为原来的一倍。即一个初始化size为16的
HashSet,元素添加到12个的时候会进行扩容,扩容后的大小为32。
备注:具体添加、读取、删除等规则需要参考 HashMap 的具体实现。