一、简介
1. 数组
- 长度一开始就指定,不可变
- 保存的数据类型必须为同一种元素
- 数组的添加新元素比较费事
package com.erick.feature.collection.d01;
public class Demo01 {
public static void main(String[] args) {
addElementToArray();
}
private static void addElementToArray() {
String[] originalArr = {"FIRST", "SECOND", "THIRD"};
String[] newArr = new String[originalArr.length + 1];
for (int i = 0; i < originalArr.length; i++) {
newArr[i] = originalArr[i];
}
newArr[newArr.length-1] = "FOURTH";
for (int i = 0; i < newArr.length; i++) {
System.out.println(newArr[i]);
}
}
}
2. 集合
2.1 单列集合

2.2 双列集合

3. 遍历
3.1 Iterable
- 凡是实现了Collection接口的集合,都可以用Iterable来进行集合遍历
private static void searchCollection() {
List<String> list = new ArrayList<>();
for (int i = 0; i < 10; i++) {
list.add("HELLO" + i);
}
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
}
3.2 增强for
private static void forEach() {
List<String> list = new ArrayList<>();
for (int i = 0; i < 10; i++) {
list.add("HELLO" + i);
}
for (String str : list) {
System.out.println(str);
}
}
3.3 普通for循环
二、 List
1. ArrayList
- 可以添加多个null元素
- 底层用数组来实现
- 非线程安全,但是效率高
1.1. 扩容机制
1. 底层维护了一个Object类型的数组 elementData
transient Object[] elementData;
2. 当创建新的ArrayList时, 如果使用的无参构造器, 则elementData初始容量为0
第一次添加,则扩容为10, 如果需要在此扩容,则扩容elementData 为1.5倍
3. 使用指定大小的构造器,则 elementData为指定大小
如果需要扩容,则扩容为1.5 倍
1.2 扩容实现
private static void copyArr(){
String[] arr = {"FIRST", "SECOND", "THIRD"};
System.out.println("arr地址:" + arr);
arr = Arrays.copyOf(arr, 5);
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
System.out.println("新的arr地址:" + arr);
}
2. Vector