Java集合ArrayList详解

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

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

Java集合ArrayList详解_第1张图片

Java 数组 与 ArrayList

在Java中,我们需要先声明数组的大小,然后才能使用它。一旦声明了数组的大小,就很难更改它。

要解决此问题,我们可以使用ArrayList类。  java.util包中存在的ArrayList类允许我们创建可调整大小的数组。

使用前需要引入它,语法格式如下:

import java.util.ArrayList; // 引入 ArrayList 类

与数组不同,当我们向数组列表添加或删除元素时,数组列表(ArrayList类的对象)可以自动调整其容量。 因此,数组列表也称为动态数组。

创建ArrayList

这是我们可以在Java中创建数组列表的方法:

ArrayList arrayList= new ArrayList<>();

此处,Type指示数组列表的类型。例如,

//创建整数类型arraylist
ArrayList arrayList = new ArrayList<>();

//创建字符串类型arraylist
ArrayList arrayList = new ArrayList<>();

在上面的程序中,我们使用了Integer和String。 在这里,Integer是int类型的相应包装类。

包装类是包装原始数据类型的类。例如,Integer类包装了int类型,Float类包装了Float类型,等等。

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

对于字符串,String是一个类,没有包装类。因此,我们按原样使用String。

我们还可以使用List接口创建ArrayList。这是因为ArrayList类实现了List接口。

List list = new ArrayList<>();

ArrayList的方法

ArrayList 提供了允许我们执行数组列表操作的各种方法。

将元素添加到ArrayList

1.使用 add() 方法

要将单个元素添加到数组列表,我们使用add()方法。例如,

import java.util.ArrayList;

class Main {
    public static void main(String[] args){
        ArrayList animals = new ArrayList<>();

        //添加元素
        animals.add("Dog");
        animals.add("Cat");
        animals.add("Horse");
        System.out.println("ArrayList: " + animals);
    }
}

输出结果

ArrayList: [Dog, Cat, Horse]

2.使用索引号

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

import java.util.ArrayList;

class Main {
    public static void main(String[] args){
        ArrayList animals = new ArrayList<>();

        //添加元素
        animals.add(0,"Dog");
        animals.add(1,"Cat");
        animals.add(2,"Horse");
        System.out.println("ArrayList: " + animals);
    }
}

输出结果

ArrayList: [Dog, Cat, Horse]

3.将一个数组列表的元素添加到另一个数组列表

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

import java.util.ArrayList;

class Main {
    public static void main(String[] args){
        ArrayList mammals = new ArrayList<>();
        mammals.add("Dog");
        mammals.add("Cat");
        mammals.add("Horse");
        System.out.println("Mammals: " + mammals);

        ArrayList animals = new ArrayList<>();
        animals.add("Crocodile");

        // 添加mammals所有元素到animals
        animals.addAll(mammals);
        System.out.println("Animals: " + animals);
    }
}

输出结果

Mammals: [Dog, Cat, Horse]
Animals: [Crocodile, Dog, Cat, Horse]

使用asList()初始化ArrayList

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

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

例如,

import java.util.ArrayList;
import java.util.Arrays;

class Main {
    public static void main(String[] args) {
        //创建数组列表
        ArrayList animals = new ArrayList<>(Arrays.asList("Cat", "Cow", "Dog"));
        System.out.println("ArrayList: " + animals);

        //访问数组列表中的元素
        String element = animals.get(1);
        System.out.println("访问元素: " + element);
    }
}

输出结果

ArrayList: [Cat, Cow, Dog]
访问元素: Cow

在上面的示例中,请注意以下表达式:

new ArrayList<>(Arrays.asList(("Cat", "Cow", "Dog"));

在这里,我们首先在3个元素的数组:"Cat","Cow",和"Dog"。然后,该asList()方法用于将数组转换为数组列表。

访问ArrayList的元素

1.使用get()方法

要随机访问数组列表的元素,我们使用get()方法。例如,

import java.util.ArrayList;

class Main {
    public static void main(String[] args) {
        ArrayList animals= new ArrayList<>();

        //在数组列表中添加元素
        animals.add("Dog");
        animals.add("Horse");
        animals.add("Cat");
        System.out.println("ArrayList: " + animals);

        //从数组列表中获取元素
        String str = animals.get(0);
        System.out.print("索引0处的元素: " + str);
    }
}

输出结果

ArrayList: [Dog, Horse, Cat]
索引0处的元素: Dog

2.使用 iterator() 方法

要按顺序访问数组列表的元素,我们使用iterator()方法。我们必须导入 java.util.Iterator 包才能使用此方法。例如,

import java.util.ArrayList;
import java.util.Iterator;

class Main {
    public static void main(String[] args){
        ArrayList animals = new ArrayList<>();

        //在数组列表中添加元素
        animals.add("Dog");
        animals.add("Cat");
        animals.add("Horse");
        animals.add("Zebra");

        //创建一个Iterator对象
        Iterator iterate = animals.iterator();
        System.out.print("ArrayList: ");

        //使用Iterator的方法访问元素
        while(iterate.hasNext()){
            System.out.print(iterate.next());
            System.out.print(", ");
        }
    }
}

输出结果

ArrayList: Dog, Cat, Horse, Zebra,

注意事项

  • hasNext() - 如果数组列表中有下一个元素,则返回true。

  • next()  -  返回数组列表中的下一个元素

更改ArrayList元素

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

import java.util.ArrayList;

class Main {
    public static void main(String[] args) {
        ArrayList 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);
    }
}

输出结果

ArrayList: [Dog, Cat, Horse]
修改后的ArrayList: [Dog, Cat, Zebra]

删除ArrayList元素

1.使用 remove() 方法

要从数组列表中删除元素,我们可以使用remove()方法。例如,

import java.util.ArrayList;

class Main {
    public static void main(String[] args) {
        ArrayList 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);
    }
}

输出结果

初始ArrayList: [Dog, Cat, Horse]
最终ArrayList: [Dog, Cat]
删除元素: Horse

2.使用 removeAll() 方法

要从数组列表中删除所有元素,我们使用removeAll()方法。例如,

import java.util.ArrayList;

class Main {
    public static void main(String[] args) {
        ArrayList 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);
    }
}

输出结果

初始ArrayList: [Dog, Cat, Horse]
最终ArrayList: []

3.使用 clear() 方法

我们还可以使用clear()方法从数组列表中删除所有元素。例如,

import java.util.ArrayList;

class Main {
    public static void main(String[] args) {
        ArrayList 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);
    }
}

输出结果

初始ArrayList: [Dog, Cat, Horse]
最终ArrayList: []

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

遍历 ArrayList

1.使用 for 循环

import java.util.ArrayList;

class Main {
    public static void main(String[] args) {
        //创建数组列表
        ArrayList animals = new ArrayList<>();
        animals.add("Cow");
        animals.add("Cat");
        animals.add("Dog");
        System.out.println("ArrayList: " + animals);

        //使用for循环
        System.out.println("访问所有元素: ");

        for(int i = 0; i < animals.size(); i++) {
            System.out.print(animals.get(i));
            System.out.print(", ");
        }
    }
}

输出结果

ArrayList: [Cow, Cat, Dog]
访问所有元素:
Cow, Cat, Dog,

2.使用 forEach 循环

import java.util.ArrayList;

class Main {
    public static void main(String[] args) {
        // 创建数组列表
        ArrayList animals = new ArrayList<>();
        animals.add("Cow");
        animals.add("Cat");
        animals.add("Dog");
        System.out.println("ArrayList: " + animals);

        //使用forEach循环
        System.out.println("访问所有元素:  ");
        for(String animal : animals) {
            System.out.print(animal);
            System.out.print(", ");
        }
    }
}

输出结果

ArrayList: [Cow, Cat, Dog]
访问所有元素:
Cow, Cat, Dog,

在两个示例中,我们都使用循环访问了数组列表的各个元素。

获取ArrayList的长度

要获取数组列表的长度,我们使用size()方法。例如,

import java.util.ArrayList;

class Main {
    public static void main(String[] args) {
        ArrayList animals= new ArrayList<>();

        // 在arrayList中添加元素
        animals.add("Dog");
        animals.add("Horse");
        animals.add("Cat");
        System.out.println("ArrayList: " + animals);

        //获取arrayList的大小
        System.out.println("arrayList的大小: " + animals.size());
    }
}

输出结果

ArrayList: [Dog, Horse, Cat]
arrayList的大小: 3

对ArrayList的元素进行排序

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

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

import java.util.ArrayList;
import java.util.Collections;

class Main {
    public static void main(String[] args){
        ArrayList 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);
    }
}

输出结果

未排序的ArrayList: [Horse, Zebra, Dog, Cat]
排序后的ArrayList: [Cat, Dog, Horse, Zebra]

要了解有关对数组列表进行排序的更多信息,请访问Java ArrayList sort。

Java ArrayList转换为数组

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

import java.util.ArrayList;

class Main {
    public static void main(String[] args) {
        ArrayList 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+", ");
        }
    }
}

输出结果

ArrayList: [Dog, Cat, Horse]
Array: Dog, Cat, Horse,

Java Array转换为ArrayList

我们还可以将数组转换为数组列表。为此,我们可以使用Arrays类的asList()方法。

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

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 animals = new ArrayList<>(Arrays.asList(arr));
        System.out.println("\nArrayList: " + animals);
    }
}

输出结果

Array: Dog, Cat, Horse
ArrayList: [Dog, Cat, Horse]

在上面的程序中,我们首先创建了String类型的数组arr。

然后,我们使用asList()方法将数组转换为数组列表。

Java ArrayList转换为字符串

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

import java.util.ArrayList;

class Main {
    public static void main(String[] args) {
        ArrayList 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);
    }
}

输出结果

ArrayList: [Dog, Cat, Horse]
String: [Dog, Cat, Horse]

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

其他的引用类型

ArrayList 中的元素实际上是对象,在以上实例中,数组列表元素都是字符串 String 类型。

如果我们要存储其他类型,而 只能为引用数据类型,这时我们就需要使用到基本类型的包装类。

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

Java集合ArrayList详解_第2张图片

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

ArrayList li=new ArrayList<>();     // 存放整数元素
ArrayList li=new ArrayList<>();   // 存放字符元素

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 中每一个元素并执行特定操作

你可能感兴趣的:(集合,java,开发语言)