数组列表
- 基于数组实现的容量大小可动态变化的数据结构
- 可以将很多数组操作的细节封装起来
- 可以动态扩容,弥补数组固定长度的不足

ArrayList概述
ArrayList可理解为动态可变数组,与Java中的数组相比,最大的区别是数组列表的容量能动态增长
- 特点:查询效率高,增加删除效率低
ArrayList是List接口的可变数组实现,实现了List接口
ArrayList是线程不安全的
Vector类是上古时代的ArrayList,现在已经不推荐使用
ArrayList
// 如何构造声明ArrayList
// (1) 不带类型的
ArrayList list = new ArrayList()
// (2) 带类型声明 <>里面全部要引用类型 (基本类型要转化成包装类)
ArrayList<Integer> integerArrayList = new ArrayList<Integer>()
// (3) 推荐写法
List<Integer> integerList = new ArrayList<>()
List<String> stringList = new ArrayList<>()
List<User> users = new ArrayList<>()
- 【重要】
size/isEmpty/contains方法
System.out.println("Size: " + integerList2.size());
System.out.println("Is empty: " + integerList2.isEmpty());
System.out.println("contains abc: " + integerList2.contains("abc"));
System.out.println("contains abc: " + integerList2.contains(1));
System.out.println("Index of 2 in integer list 2: " + integerList2.indexOf(2));
System.out.println("Index of 3 in integer list 2: " + integerList2.indexOf(3));
System.out.println("Index of abc in integer list 2: " + integerList2.indexOf("abc"));
System.out.println("Index of 2 in integer list 2: " + integerList2.lastIndexOf(2));
System.out.println("Index of 3 in integer list 2: " + integerList2.lastIndexOf(3));
System.out.println("Index of abc in integer list 2: " + integerList2.lastIndexOf("abc"));
// toArray方法,无法确定类型
Object[] arrays = integerList2.toArray()
// 可以用foreach将单个元素转为int类型
for (Object array : arrays) {
int number = (int) array
System.out.println("number in arrays: " + number)
}
// 如果new Integer[],[]里的数小于integerList2的size,就会将ints的size扩成integerList2的size并拷贝integerList2的元素
// 如果new Integer[],[]里的数大于integerList2的size,就会将ints的size扩成10并拷贝integerList2的元素
Integer[] ints = integerList2.toArray(new Integer[0])
for (int number : ints) {
System.out.println("int number: " + number)
}
System.out.println("Element in index 0 :" + integerList2.get(0));
for (Integer num : integerList2) {
System.out.println("Get number: " + num);
}
integerList2.forEach(System.out::println);
System.out.println("Index 2 Element before setting: " + integerList2.get(2));
integerList2.set(2, 20);
System.out.println("Index 2 Element after setting: " + integerList2.get(2));
integerList2.add(7);
System.out.println("Index 5 Element after adding: " + integerList2.get(5));
integerList2.add(2, 100);
System.out.println("Index 2 Element after setting: " + integerList2.get(2));
integerList2.forEach(System.out::println);
Integer toRemove = integerList2.remove(3);
System.out.println("Remove index 3: " + toRemove);
Boolean isRemove = integerList2.remove(new Integer(2));
System.out.println("Remove first value 2: " + isRemove);
integerList2.forEach(System.out::println);
System.out.println("Size: " + integerList2.size());
integerList2.clear();
System.out.println("Size after method clear(): " + integerList2.size());
removeAll/retainAll/addAll方法
List<String> stringList = new ArrayList<>();
stringList.add("a");
stringList.add("b");
stringList.add("A");
List<String> stringList1 = new ArrayList<>();
stringList1.add("a");
stringList1.add("A");
stringList1.add("z");
boolean containsAllResult = stringList.containsAll(stringList1);
System.out.println("Result of method containsAll: " + containsAllResult);
stringList.addAll(stringList1);
for (String str : stringList) {
System.out.println("String Element: " + str);
}
stringList.addAll(1, stringList1);
for (int i = 0; i < stringList.size(); i++) {
System.out.println("index: " + i + " String: " + stringList.get(i));
}
Collection stringList3 = new ArrayList<>();
stringList3.add("a");
stringList3.add("a");
stringList3.add("Y");
stringList3.add("A");
boolean removeAllResult = stringList.removeAll(stringList3);
System.out.println("Result of method removeAll: " + removeAllResult);
for (int i = 0; i < stringList.size(); i++) {
System.out.println("removeAll Index: " + i + " Element: " + stringList.get(i));
}
List<String> stringList4 = new ArrayList<>();
stringList4.add("a");
stringList4.add("b");
stringList4.add("A");
List<String> stringList5 = new ArrayList<>();
stringList5.add("a");
stringList5.add("a");
stringList5.add("A");
stringList5.add("z");
boolean retainAllResult = stringList4.retainAll(stringList5);
System.out.println("Result of method retainAll: " + retainAllResult);
for (int i = 0; i < stringList4.size(); i++) {
System.out.println("retainAll index: " + i + "Element: " + stringList4.get(i));
}