List 与 Set 的区别
List
- 有序
- 可重复
- 数组或链表存储
Set
- 无序
- 不可重复
- 使用map存储
一、ArrayList
-
通过数组的方式进行存储:查询快,增删慢的特点,但是他的效率高
-
初始化过程中若知道数组的大约范围,建议制定长度;若不指定长度,默认初始化大小为10;
-
ArrayList两个属性
- size:可以理解为数组长度
- elementData:可以理解为容量大小
-
扩容问题:每次使用add方法时,会触发扩容方法,当容量不够时候,进行扩容
扩容时步骤:
1:将size+1,和现在的elementData长度比较比较
2:若小于现有容量,则不扩容;
3:若大于现有容量,则
3 .1:备份原数组;
3.2:扩容为原来大小的1.5倍
3.2:通过Arrays.copyOf(elementData, newCapacity)方法返回扩容后的数据。
-
删除(remove)
-
迭代
- 方式1:Iterator迭代器
- 方式2:foreach
二、HashSet
- HashSet 内部是一个map,通过HashMap来保证数据的唯一性,因此是非线程安全和无序的
- 数据时没有get方法,只能通过迭代的方式获取数据map中所有的key