集合只能存储引用数据类型
COllection
方法:
迭代器的使用遍历集合:
Iterator<Person> iterator = list.iterator();
while(iterator.hasNext()){
System.out.println(iterator.next());
}
List实现类
-
ArrayList【重点】(开辟连续空间)
-
数组解构实现,查询快,增删慢
-
线程不安全,运行效率快
-
默认容量是10
-
注意:如果没有向数组添加元素,默认容量就为0,一旦添加元素,默认容量就变为10
另外,他每次扩容都是原来的1.5倍
-
-
Vextor
- 数组结构实现,查询快,增删快
- 线程安全,运行效率慢(相对于ArrayList)
-
LinkedList(无需开辟连续空间)
- 链表解构实现,增删快,查询慢
Set实现类
特点:无序(输入输出元素顺序可能不同),无下标,不能重复
只能使用增强for与迭代器两种方法遍历
-
HashSet【重点】
- 基于HashCode计算元素存放位置
- 当存入元素哈希码相同时,会调用equals进行确认,如果为true,则拒绝后者存入
- TreeSet
- 基于排列顺序实现元素的不重复
- 实现了SortedSet接口,对集合元素自动排序
- 元素对象的类型必须实现Comparable接口,指定排列顺序
- 通过CompareTo方法确定是否为重复元素
Map
特点:存储一堆数据,无序、无下标,键可以重复,值不能重复
方法:
HashMap【重要】
初始容量16
加载因子为0.75(当容量用到初始容量的百分之七十五就开始扩容)
总结:
- HashMap刚创建时,table为null,为了节省空间,当添加第一个元素时,table容量调整为16
- 当元素个数大于阈值(16*0.75=12)时,会进行扩容,扩容大小为原来二倍。目的是减小调整元素个数
- jdk1.8 当每个链表长度大于8,并且元素个数大于等于64时,会调整为红黑树,,目的时提高执行效率
- jdk1.8 当链表长度小于6时,调整成链表
- jdk1.8 以前,链表时头插入,jdk1.8 之后是尾插入