一篇文章带你彻底理解Java ArrayList数据结构详解
基本概念:
**之前创建数组的时候,需要声明提前声明数组的大小,**ArrayList是一个可以动态修改的数组,与普通数组的区别就是没有固定大小的限制,它会动态调整长度。
**ArrayList继承了AbstractList,并实现了List接口。**如下图:
**ArrayList 类位于 java.util 包中,**使用前需要引入它,语法格式如下:
import java.util.ArrayList; // 引入 ArrayList 类
那么声明并且初始化的语法如下:
ArrayList<E> objectName =new ArrayList<>(); // 初始化
- E: 泛型数据类型,用于设置 objectName 的数据类型,只能为引用数据类型。(PS:Java的数据类型分为俩种,基本数据类型(byte、char、short、int、float、double、long、boolean)和引用数据类型,对象、数组、包装类、枚举类、字符串等)
- objectName: 对象名。
ArrayList 是一个数组队列,提供了相关的添加、删除、修改、遍历等功能。
下面是具体的例子:
import java.util.ArrayList;
import java.util.Iterator;
public class ArrayListExample {
public static void main(String[] args) {
ArrayList<String> fruits = new ArrayList<>();
// 添加元素到列表末尾
fruits.add("Apple");
fruits.add("Banana");
fruits.add("Orange");
// 修改元素
fruits.set(1, "Mango");//set()返回之前在 index 位置的元素 。并且替换动态数组中的某元素:如果 index 值超出范围,则抛出 IndexOutOfBoundsException 异常。
// 删除元素
fruits.remove("Orange");//remove()如果传入索引值,则返回删除的元素。成功返回true,否则false。注意:如果指定的索引超出范围,则该方法将抛出 IndexOutOfBoundsException 异常。
// 查找元素
String fruit = fruits.get(0);//get(index)方法查找索引处的值
// 遍历元素(方式一:使用 for 循环)
for (int i = 0; i < fruits.size(); i++) {
System.out.println(fruits.get(i));
}
// 遍历元素(方式二:使用迭代器)
Iterator<String> iterator = fruits.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
// 遍历元素(方式三:使用 for-each 循环)
for (String item : fruits) {
System.out.println(item);
}
//获取ArrayList中的元素数量使用size()方法
System.out.println(fruits.size());
}
}
按照示例代码中的顺序执行,输出结果如下:
Apple
Mango
2
反思:通过我们上面的例子,我们实现了 ArrayList 的增加元素、修改元素、删除元素、查找元素和遍历元素的操作。
并且咱们使用不同的方式进行遍历ArrayList中的数据:
- 通过索引使用 for 循环遍历、
- 使用迭代器进行遍历
- 使用 for-each 循环进行遍历。
根据需求选择适合的遍历方式来访问 ArrayList 中的元素。
ArrayList 排序
Collections 类也是一个非常有用的类,位于 java.util 包中,提供的 sort() 方法可以对字符或数字列表进行排序。
以下实例对字母进行排序:
import java.util.ArrayList;
import java.util.Collections; // 引入 Collections 类
public class RunoobTest {
public static void main(String[] args) {
ArrayList<String> sites = new ArrayList<String>();
sites.add("Taobao");
sites.add("Wiki");
sites.add("Runoob");
sites.add("Weibo");
sites.add("Google");
Collections.sort(sites); // 字母排序
for (String i : sites) {
System.out.println(i);
}
}
}
以上实例,执行输出结果为:
Google
Runoob
Taobao
Weibo
Wiki
若是对数字进行排序:(默认从小到大)
import java.util.ArrayList;
import java.util.Collections; // 引入 Collections 类
public class RunoobTest {
public static void main(String[] args) {
ArrayList<Integer> myNumbers = new ArrayList<Integer>();
myNumbers.add(33);
myNumbers.add(15);
myNumbers.add(20);
myNumbers.add(34);
myNumbers.add(8);
myNumbers.add(12);
Collections.sort(myNumbers); // 数字排序
for (int i : myNumbers) {
System.out.println(i);
}
}
}
以上实例,执行输出结果为:
8
12
15
20
33
34
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 中每一个元素并执行特定操作 |
更多 API 方法可以查看:https://www.runoob.com/manual/jdk11api/java.base/java/util/ArrayList.html
结尾语:记录于2023年8月4号19时30分,以上仅为个人在[Java数据结构ArrayList—Java高级编程—菜鸟教程](Java ArrayList | 菜鸟教程 (runoob.com))的学习过程中遇到的问题,还有记录的个人想法,有错误欢迎指出,希望对您有帮助,感谢观看!如果可以的话,点点赞,点点关注