ArrayList
- 一、ArrayList 是什么?
- 二、Java ArrayList 方法
- 三、案例演示
-
一、ArrayList 是什么?
ArrayList 类是一个可以动态修改的数组,与普通数组的区别就是它是没有固定大小的限制,我们可以添加或删除元素。
ArrayList 继承了 AbstractList ,并实现了 List 接口。
ArrayList 类位于 java.util 包中,使用前需要引入它,语法格式如下:
import java.util.ArrayList; // 引入 ArrayList 类ArrayList<E> objectName =new ArrayList<>(); // 初始化
E: 泛型数据类型,用于设置 objectName 的数据类型,只能为引用数据类型。
objectName: 对象名。
二、Java ArrayList 方法
Java ArrayList 常用方法列表如下:
方法描述
| add() | 将元素插入到指定位置的 arraylist 中 |
| addAll() | 添加集合中的所有元素到 arraylist 中 |
| clear() | 删除 arraylist 中的所有元素 |
| clone() | 复制一份 arraylist |
| contains() | 判断元素是否在 arraylist |
| get() | 通过索引值获取 arraylist 中的元素 |
| indexOf() | 返回 arraylist 中元素的索引值 |
| removeAll() | 删除存在于指定集合中的 arraylist 里的所有元素 |
| remove() | 删除 arraylist 里的单个元素 |
| size() | 返回 arraylist 里元素数量 |
| isEmpty() | 判断 arraylist 是否为空 |
| subList() | 截取部分 arraylist 的元素 |
| set() | 替换 arraylist 中指定索引的元素 |
| sort() | 对 arraylist 元素进行排序 |
| toArray() | 将 arraylist 转换为数组 |
| toString() | 将 arraylist 转换为字符串 |
| ensureCapacity() | 设置指定容量大小的 arraylist |
| lastIndexOf() | 返回指定元素在 arraylist 中最后一次出现的位置 |
| retainAll() | 保留 arraylist 中在指定集合中也存在的那些元素 |
| containsAll() | 查看 arraylist 是否包含指定集合中的所有元素 |
| trimToSize() | 将 arraylist 中的容量调整为数组中的元素个数 |
| removeRange() | 删除 arraylist 中指定索引之间存在的元素 |
| replaceAll() | 将给定的操作内容替换掉数组中每一个元素 |
| removeIf() | 删除所有满足特定条件的 arraylist 元素 |
| forEach() | 遍历 arraylist 中每一个元素并执行特定操作 |
三、案例演示
import java.util.ArrayList;import java.util.Comparator;/*** @Description: $ArrayList案例演示* @Author: dyq* @Date: $2021年2月3日*/public class ArrayListTest {public static void main(String[] args) {// 初始化一个String类型的数组ArrayList<String> a = new ArrayList();// 设置 arraylist的容量大小 nsureCapacity() 方法将动态数组大小调整为可以存放 6 个元素。//Java 中的 ArrayList 可动态调整大小。也就是说,如果我们在 arraylist 中添加 3 个以上的元素,它将自动调整自身大小,a.ensureCapacity(6);//add()方法增加a.add("妈妈");a.add("爸爸");a.add("哥哥");a.add("姐姐");a.add("弟弟");a.add("妹妹");System.out.println("数组内容为:"+a);System.out.println("元素数量为: "+a.size()); //返回 arraylist 里元素数量System.out.println("第二个元素:"+a.get(1)); // 访问第二个元素 ,注意:数组的索引值从 0 开始。a.set(2, "Wiki"); // 第一个参数为索引位置,第二个为要修改的值System.out.println("修改后数组内容为:"+a);a.replaceAll(e -> e.toUpperCase()); // 将所有元素更改为大写System.out.println("数组内容为:"+a);a.remove(3); // 删除第四个元素System.out.println("删除后数组内容为:"+a);/*removeIf() 方法的语法为:arraylist.removeIf(Predicate<E> filter)注:arraylist 是 ArrayList 类的一个对象。filter - 过滤器,判断元素是否要删除* */// 删除名称中带有 哥 的元素a.removeIf(e -> e.contains("哥"));System.out.println("删除名称中带有 哥 的 ArrayList: " + a);//使用 for 来迭代数组列表中的元素System.out.println("用for循环遍历数组为:");for (int i = 0; i < a.size(); i++) {System.out.println(a.get(i));}System.out.println("使用 for-each 来迭代元素");for (String i: a) {System.out.println(i);}// 输出 clone() 方法所返回的值System.out.println("clone() 返回值: " + a.clone());// 检查 Wiki 是否在这个数组中System.out.print("Wiki 是否存在于 arraylist: ");System.out.println(a.contains("Wiki"));// 查找位置索引值为 Wiki 的元素int position1 = a.indexOf("Wiki");System.out.println("Wiki 的索引位置: " + position1); // 注意:数组的索引值从 0 开始。// 元素进行升序排列a.sort(Comparator.naturalOrder());System.out.println("升序排序后: " + a); //升序排序后: [妈妈, 妹妹, 弟弟, 爸爸]// 降序a.sort(Comparator.reverseOrder());System.out.println("降序排序: " + a); //降序排序: [爸爸, 弟弟, 妹妹, 妈妈]// 将ArrayList转换为String类型/* String list = a.toString();System.out.println("转String类型后: " + list);*/// 获取 妈妈 最后一次出现的位置int position = a.lastIndexOf("妈妈");System.out.println("妈妈 最后出现的位置: " + position); //注意: Wiki已经 不在 arraylist 中若要查找 则会返回 -1// 调整容量为3 trimToSize() 方法可以删除未分配的空间并更改 ArrayList 的容量,使其等于 ArrayList 中的元素个数。a.trimToSize();System.out.println("ArrayList 1 大小: " + a.size());System.out.println("ArrayList 1: " + a);// 创建另一个动态数组ArrayList<String> a1 = new ArrayList<>();// 往动态数组中添加元素//a1.add("舅舅");a1.add("妈妈");a1.add("妹妹");System.out.println("ArrayList 2: " + a1);// 在a 和 a1 中保留公共的元素(取交集的意思)a1.retainAll(a);System.out.println("保留的元素: " + a1);// 检查动态数组1是否包含动态数组2 (包含与被包含的关系)boolean result1 = a.containsAll(a1);System.out.println("a 包含了a1 的所有元素: " + result1); //true// 检查数组2是否包含数组1boolean result2 = a1.containsAll(a);System.out.println("a1 包含了 a 的所有元素: " + result2);//removeAll() 和 clear() 方法功能都是一样都。但是 clear() 方法的比 removeAll() 更常被用到,因为 clear() 比 removeAll() 更快,更高效。// 删除所有元素/* a.clear();System.out.println("所有 clear() 方法后: " + a);*//*// 删除所有元素a.removeAll(a);System.out.println("所有 removeAll() 方法后: " + a);*/// 删除元素 Wikiboolean result = a.remove("Wiki");System.out.println("Wiki 是否被删除? " + result);System.out.println("修改后数组内容为:"+a);// 检查该数组是否为空result = a.isEmpty(); // falseSystem.out.println("数组 a 是否为空? " + result);// 元素位置为1到3 subList() 该 subList() 方法获取索引 1 到 3(不包括 3)元素 所以返回索引为1-2的数//System.out.println("元素位置为1到3 SubList: " + a.subList(1, 3));// 删除从索引值1到3的元素 removeRange() 方法是受保护的,所以如果要使用需要继承 ArrayList 类,继承后我们就可以使用 Main 类来创建一个动态数组。//removeRange() 方法不常用,我们通常可以使用 ArrayList subList() 和 ArrayList clear() 方法来实现删除元素。// 已经不用这个了 a.removeRange(1, 3);a.subList(1, 3).clear();System.out.println("删除后的 ArrayList: " + a);}}
结果:
数组内容为:[妈妈, 爸爸, 哥哥, 姐姐, 弟弟, 妹妹]元素数量为: 6第二个元素:爸爸修改后数组内容为:[妈妈, 爸爸, Wiki, 姐姐, 弟弟, 妹妹]数组内容为:[妈妈, 爸爸, WIKI, 姐姐, 弟弟, 妹妹]删除后数组内容为:[妈妈, 爸爸, WIKI, 弟弟, 妹妹]删除名称中带有 哥 的 ArrayList: [妈妈, 爸爸, WIKI, 弟弟, 妹妹]用for循环遍历数组为:妈妈爸爸WIKI弟弟妹妹使用 for-each 来迭代元素妈妈爸爸WIKI弟弟妹妹clone() 返回值: [妈妈, 爸爸, WIKI, 弟弟, 妹妹]Wiki 是否存在于 arraylist: falseWiki 的索引位置: -1升序排序后: [WIKI, 妈妈, 妹妹, 弟弟, 爸爸]降序排序: [爸爸, 弟弟, 妹妹, 妈妈, WIKI]妈妈 最后出现的位置: 3ArrayList 1 大小: 5ArrayList 1: [爸爸, 弟弟, 妹妹, 妈妈, WIKI]ArrayList 2: [妈妈, 妹妹]保留的元素: [妈妈, 妹妹]a 包含了a1 的所有元素: truea1 包含了 a 的所有元素: falseWiki 是否被删除? false修改后数组内容为:[爸爸, 弟弟, 妹妹, 妈妈, WIKI]数组 a 是否为空? false删除后的 ArrayList: [爸爸, 妈妈, WIKI]