ArrayList集合详解
1、理解
- 动态数组:
ArrayList
本质上是一个可以动态调整大小的数组。当添加或删除元素时,它会根据需要自动增长或缩小其容量。- 索引访问:与普通的 Java 数组类似,
ArrayList
中的元素可以通过索引(从 0 开始)来访问。- 泛型支持:
ArrayList
是泛型的,这意味着你可以指定它包含的元素类型,例如ArrayList
或ArrayList
。
2、特性
- 自动扩容:当向
ArrayList
添加元素而容量不足时,它会自动增长。默认情况下,容量会翻倍(但也可能只是增长某个固定的大小)。- 随机访问:由于
ArrayList
是基于数组的,所以访问任意位置的元素都是很快的(常数时间复杂度)。- 插入和删除效率:在列表的末尾添加或删除元素是很快的(近似常数时间复杂度)。但在列表的中间或开头插入或删除元素可能较慢,因为可能需要移动大量元素以保持列表的连续性。
- 内存使用:由于
ArrayList
需要维护一个数组,并且可能频繁地扩容和重新分配内存,因此它可能会比某些其他集合类型(如LinkedList
)使用更多的内存。
3、用法
1、导入
import java.util.ArrayList;
2、创建
ArrayList list = new ArrayList(); // Java 7 及更早版本
ArrayList list = new ArrayList<>(); // Java 8 及更新版本(使用类型推断)
3、操作
1、添加元素
list.add(“元素1”)
list.add(“元素2”)
list.add(“元素3”)
2、设置指定下标上的元素
list.set(1, “1号”);
3、获取指定下标上的元素
String str = list.get(1);
System.out.println(“获取指定下标上的元素:” + str);//1号
4、获取元素个数
int size = list.size();
System.out.println(“获取元素个数:” + size);//3
5、在指定下标上添加元素
list.add(2, “2号”);
6、批量添加元素
ArrayList newList1 = new ArrayList<>();
Collections.addAll(newList1, “aaa”,“bbb”,“ccc”,“ccc”);//利用集合工具类(Collections)
ArrayList newList2 = new ArrayList<>();
Collections.addAll(newList2, “xxx”,“xxx”,“yyy”,“yyy”,“zzz”,“zzz”);//利用集合工具类(Collections)
list.addAll(3, newList2);//将newList2中所有的元素都添加到list集合里指定下标的位置
7、清空集合中所有元素
list.clear();
8、判断元素是否包含指定元素
list.contains(“1号”));
9、判断集合中是否包含指定集合
list.containsAll(newList1));
10、获取元素在集合中第一次出现的下标
list.indexOf(“ccc”));
11、获取元素在集合中最后一次出现的下标
list.lastIndexOf(“ccc”));
12、判断集合里是否没有元素
list.isEmpty());
13、通过下标删除元素
list.remove(9);
14、通过数据删除元素
list.remove(“2号”);
15、去除交集
list.removeAll(newList1);
16、保留交集
list.retainAll(newList2);
17、从开始下标处(包含)截取到结束下标处(排他)的元素,返回新的集合
List subList = list.subList(1, 4);
18、将集合转换为数组
Object[] array1 = subList.toArray();
System.out.println(Arrays.toString(array1));
19、将集合转换为指定类型的数组
String[] array2 = new String[3];
subList.toArray(array2);
System.out.println(Arrays.toString(array2));
20、遍历集合 – for循环
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
21、遍历集合 – foreach
for (String element : list) {
System.out.println(element);
}
22、遍历集合 – Iterator
Iterator it = list.iterator();
while(it.hasNext()){//判断是否有可迭代的元素
String next = it.next();//获取下一个元素
System.out.println(next);
}
23、遍历集合 – ListIterator
ListIterator listIterator = list.listIterator();
while(listIterator.hasNext()){//判断是否有可迭代的元素
String next = listIterator.next();//获取下一个元素
System.out.println(next);
}