1.Set集合接口的特点:
- 1.set集合中的元素不可以重复;
- 2.有且最多只能包含一个null值;
- 3.Set是一个没有索引的集合。
2.Set集合的遍历
- 1.通过迭代器进行遍历
- 2.通过增强for进行遍历
3.HashSet集合的特点:
-
1.一个不包含重复元素的 collection
-
2.HashSet集合最多包含一个null元素
-
3.HashSet集合是没有索引值的集合
-
4.底层数据结构:哈希表(HashMap)
在JDK1.7之前(包含):数组+链表 在JDK1.8之后(包含):数组+链表或数组+红黑树(链表长度达到8)
-
5.HashSet是无序的集合
无序:存入的顺序和取出的顺序不一致(不是随机概念)
4.HashSet集合如何保证元素的唯一性
- 1.hashCode()
- 2.equals()
String类中hashCode()为什么乘以31
针对对象人工模拟的地址值,不是真实的内存物理地址值,有可能存在误差
- 1.乘以质数减少哈希码冲突
- 2.如果质数过大,会超出int取值范围,如果质数过小,哈希码冲突概率增大(29和31较为合适两个数据)
- 3.31的二进制位11111,转换十进制2表示方式 2^5 -1 和整数类型取值范围方式也是一样
5.LinkedHashSet的特点
-
1.LinkedHashSet有序的集合
-
2.底层数据结构:
哈希表+单向链表(保证元素的有序性)
-
3.LinkedHashSet也是不可以存储重复元素
-
4.LinkedHashSet里面没有特有的方法,全部是继承过来