JavaSE21——ArrayList

集合框架

ArrayList

一、概述

ArrayList 类是一个可以动态修改的数组,与普通数组的区别就是它是没有固定大小的限制,我们可以添加或删除元素。

ArrayList 继承了 AbstractList ,并实现了 List 接口。

ArrayList中的元素可以通过索引访问,并且可以很容易地添加和删除元素。

二、特点

  1. 动态数组:ArrayList是一个动态数组,可以根据需要自动扩展或缩小数组的大小。
  2. 快速访问:ArrayList中的元素可以通过索引访问,访问速度比普通数组更快。
  3. 方便的添加和删除操作:ArrayList提供了add()、remove()等方法,可以方便地添加和删除元素。
  4. 可迭代性:ArrayList实现了Iterable接口,可以使用for-each循环遍历元素。

三、使用示例

1.创建ArrayList对象
java 复制代码
ArrayList<String> list = new ArrayList<String>();

泛型: 在 Java 中,ArrayList 支持使用泛型来指定存储的元素类型。通过使用泛型,我们可以确保 ArrayList 只能存储特定类型的对象,提高了类型的安全性和代码的可读性。

泛型可以是基本数据类型的包装类,也可以是自定义类。

使用泛型的好处是可以在编译时进行类型检查,并且可以避免在运行时出现类型转换错误。同时,通过使用泛型,可以在提取元素时避免使用类型转换。

**注意:**我们不能创建原始数据类型(如int,float,char等)的数组列表。相反,我们必须使用它们对应的包装器类。

基本类型对应的包装类表如下:

基本类型 引用类型
boolean Boolean
byte Byte
short Short
int Integer
long Long
float Float
double Double
char Character

此外,BigInteger、BigDecimal 用于高精度的运算,BigInteger 支持任意精度的整数,也是引用类型,但它们没有相对应的基本类型。

2.添加元素到ArrayList中
java 复制代码
list.add("Apple");  
list.add("Banana");  
list.add("Orange");

我们还可以使用索引将元素添加到数组列表中。例如,

java 复制代码
import java.util.ArrayList;
 
class Main {
    public static void main(String[] args){
        ArrayList<String> animals = new ArrayList<>();
 
        //添加元素
        animals.add(0,"Dog");
        animals.add(1,"Cat");
        animals.add(2,"Horse");
        System.out.println("ArrayList: " + animals);
    }
}
3.将一个数组列表的元素添加到另一个数组列表

要将数组列表的所有元素添加到新的数组列表,请使用addAll()方法。例如,

java 复制代码
import java.util.ArrayList;
 
class Main {
    public static void main(String[] args){
        ArrayList<String> mammals = new ArrayList<>();
        mammals.add("Dog");
        mammals.add("Cat");
        mammals.add("Horse");
        System.out.println("Mammals: " + mammals);
 
        ArrayList<String> animals = new ArrayList<>();
        animals.add("Crocodile");
 
        // 添加mammals所有元素到animals
        animals.addAll(mammals);
        System.out.println("Animals: " + animals);
    }
}
4 使用asList()初始化ArrayList

与数组不同,我们不能直接初始化数组列表。 但是,我们可以使用Arrays类的asList()方法来达到相同的效果。

为了使用asList()方法,我们必须先导入 java.util.Arrays 包。

例如

java 复制代码
import java.util.ArrayList;
import java.util.Arrays;
 
class Main {
    public static void main(String[] args) {
        //创建数组列表
        ArrayList<String> animals = new ArrayList<>(Arrays.asList("Cat", "Cow", "Dog"));
        System.out.println("ArrayList: " + animals);
 
        //访问数组列表中的元素
        String element = animals.get(1);
        System.out.println("访问元素: " + element);
    }
}
5 获取ArrayList中的元素

1.使用get()方法

java 复制代码
String fruit1 = list.get(0); // 获取第一个元素  
String fruit2 = list.get(1); // 获取第二个元素

2.使用 iterator() 方法

java 复制代码
import java.util.ArrayList;
import java.util.Iterator;
 
class Main {
    public static void main(String[] args){
        ArrayList<String> animals = new ArrayList<>();
 
        //在数组列表中添加元素
        animals.add("Dog");
        animals.add("Cat");
        animals.add("Horse");
        animals.add("Zebra");
 
        //创建一个Iterator对象
        Iterator<String> iterate = animals.iterator();
        System.out.print("ArrayList: ");
 
        //使用Iterator的方法访问元素
        while(iterate.hasNext()){
            System.out.print(iterate.next());
            System.out.print(", ");
        }
    }
}
6 更改ArrayList元素

要更改数组列表的元素,我们可以使用set()方法。例如,

java 复制代码
import java.util.ArrayList;
 
class Main {
    public static void main(String[] args) {
        ArrayList<String> animals= new ArrayList<>();
        //在数组列表中添加元素
        animals.add("Dog");
        animals.add("Cat");
        animals.add("Horse");
        System.out.println("ArrayList: " + animals);
 
        //更改数组列表的元素
        animals.set(2, "Zebra");
        System.out.println("修改后的ArrayList: " + animals);
    }
}
7 删除ArrayList元素

1 remove()

java 复制代码
import java.util.ArrayList;
 
class Main {
    public static void main(String[] args) {
        ArrayList<String> animals = new ArrayList<>();
 
        //在数组列表中添加元素
        animals.add("Dog");
        animals.add("Cat");
        animals.add("Horse");
        System.out.println("初始ArrayList: " + animals);
 
        //从索引2中删除元素
        String str = animals.remove(2);
        System.out.println("最终ArrayList: " + animals);
        System. out.println("删除元素: " + str);
    }
}

2 removeAll()

使用removeAll()方法,删除数组中的所有元素

java 复制代码
import java.util.ArrayList;
 
class Main {
    public static void main(String[] args) {
        ArrayList<String> animals = new ArrayList<>();
 
        // 在ArrayList中添加元素
        animals.add("Dog");
        animals.add("Cat");
        animals.add("Horse");
        System.out.println("初始ArrayList: " + animals);
 
        // 删除所有元素
        animals.removeAll(animals);
        System.out.println("最终ArrayList: " + animals);
    }
}

3 clear()

还可以使用removeAll()方法,删除数组中的所有元素

java 复制代码
import java.util.ArrayList;
 
class Main {
    public static void main(String[] args) {
        ArrayList<String> animals= new ArrayList<>();
 
        //在数组列表中添加元素
        animals.add("Dog");
        animals.add("Cat");
        animals.add("Horse");
        System.out.println("Initial ArrayList: " + animals);
 
        //删除所有元素
        animals.clear();
        System.out.println("Final ArrayList: " + animals);
    }
}

注意:clear()方法比removeAll()方法更高效。

8 获取集合大小

如果要计算 ArrayList 中的元素数量可以使用 size() 方法:

java 复制代码
import java.util.ArrayList;

public class RunoobTest {
    public static void main(String[] args) {
        ArrayList<String> sites = new ArrayList<String>();
        sites.add("hello");
        sites.add("world");
        sites.add("hi");
        sites.add("china");
        System.out.println(sites.size());
    }
}
9 遍历 ArrayList

1 for循环

java 复制代码
import java.util.ArrayList;

public class RunoobTest {
    public static void main(String[] args) {
        ArrayList<String> sites = new ArrayList<String>();
        sites.add("hello");
        sites.add("world");
        sites.add("hi");
        sites.add("china");
        for (int i = 0; i < sites.size(); i++) {
            System.out.println(sites.get(i));
        }
    }
}

2.使用 forEach 循环

java 复制代码
import java.util.ArrayList;

public class RunoobTest {
    public static void main(String[] args) {
        ArrayList<String> sites = new ArrayList<String>();
        sites.add("hello");
        sites.add("world");
        sites.add("hi");
        sites.add("china");
        for (String i : sites) {
            System.out.println(i);
        }
    }
}
10 ArrayList 排序

要对数组列表的元素进行排序,我们使用Collections类的sort()方法。为了使用它,我们必须先导入java.util.Collections包。

默认情况下,排序以字母或数字升序进行。例如,

java 复制代码
import java.util.ArrayList;
import java.util.Collections;
 
class Main {
    public static void main(String[] args){
        ArrayList<String> animals= new ArrayList<>();
 
        //在数组列表中添加元素
        animals.add("Horse");
        animals.add("Zebra");
        animals.add("Dog");
        animals.add("Cat");
 
        System.out.println("未排序的ArrayList: " + animals);
 
        //对数组列表进行排序
        Collections.sort(animals);
        System.out.println("排序后的ArrayList: " + animals);
    }
}

以下实例对数字进行排序:

java 复制代码
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);
        }
    }
}
11 ArrayList转数组

在Java中,可以使用toArray()方法将数组列表转换为数组。例如,

java 复制代码
import java.util.ArrayList;
 
class Main {
    public static void main(String[] args) {
        ArrayList<String> animals= new ArrayList<>();
 
        //在数组列表中添加元素
        animals.add("Dog");
        animals.add("Cat");
        animals.add("Horse");
        System.out.println("ArrayList: " + animals);
 
        //创建一个新的String类型数组
        String[] arr = new String[animals.size()];
 
        //将ArrayList转换成数组
        animals.toArray(arr);
        System.out.print("Array: ");
        for(String item:arr) {
            System.out.print(item+", ");
        }
    }
}
12 数组转ArrayList

数组转换为Arraylist。为此,可以使用Arrays类的asList()方法。

要使用asList(),必须先导入java.util.Arrays包。例如,

java 复制代码
import java.util.ArrayList;
import java.util.Arrays;
 
class Main {
    public static void main(String[] args) {
        //创建一个字符串类型的数组
        String[] arr = {"Dog", "Cat", "Horse"};
        System.out.print("Array: ");
 
        //打印数组
        for(String str: arr) {
            System.out.print(str);
            System.out.print(" ");
        }
 
        //从数组创建ArrayList
        ArrayList<String> animals = new ArrayList<>(Arrays.asList(arr));
        System.out.println("\nArrayList: " + animals);
    }
}
13 ArrayList转换为字符串

要将数组列表转换为字符串,可以使用toString()方法。例如

java 复制代码
import java.util.ArrayList;
 
class Main {
    public static void main(String[] args) {
        ArrayList<String> animals = new ArrayList<>();
 
        //在ArrayList中添加元素
        animals.add("Dog");
        animals.add("Cat");
        animals.add("Horse");
        System.out.println("ArrayList: " + animals);
 
        //将ArrayList转换为字符串
        String str = animals.toString();
        System.out.println("String: " + str);
    }
}

注意: toString()将整个数组列表转换为单个String。

四、 ArrayLiat 常用API

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 中每一个元素并执行特定操作
相关推荐
m0_561359671 分钟前
基于C++的机器学习库开发
开发语言·c++·算法
星空露珠8 分钟前
速算24点所有题库公式
开发语言·数据库·算法·游戏·lua
2401_832402759 分钟前
C++中的类型擦除技术
开发语言·c++·算法
努力学习的小廉17 分钟前
我爱学算法之—— 递归回溯综合(二)
开发语言·算法
sheji526119 分钟前
JSP基于信息安全的读书网站79f9s--程序+源码+数据库+调试部署+开发环境
java·开发语言·数据库·算法
2301_7634724619 分钟前
C++网络编程(Boost.Asio)
开发语言·c++·算法
毕设源码-邱学长20 分钟前
【开题答辩全过程】以 基于Java Web的电子商务网站的用户行为分析与个性化推荐系统为例,包含答辩的问题和答案
java·开发语言
程序员清洒25 分钟前
Flutter for OpenHarmony:Text — 文本显示与样式控制
开发语言·javascript·flutter
摇滚侠35 分钟前
Java项目教程《尚庭公寓》java项目从开发到部署,技术储备,MybatisPlus、MybatisX
java·开发语言
轩情吖1 小时前
Qt的窗口
开发语言·c++·qt·窗口·工具栏·桌面级开发