Java ArrayList.toArray() 方法及代码示例

获取数组列表中所有元素组成的数组

定义

public Object[] toArray()

public <T> T[] toArray​(T[] a)

参数

参数类型参数名称参数描述
T[]a如果数组足够大, 则存储列表元素的数组; 否则, 将为此目的分配相同运行时类型的新数组
类型参数E数组列表中的元素的类型
类型参数T包含了集合的数组元素的类型

返回值

返回一个数组, 该数组以适当的顺序(从第一个元素到最后一个元素)包含列表中的所有元素.

如果指定了数组参数, 且数组的长度大于数组列表的长度, 那么数组中不足的元素会用 null 填充.

抛出的异常

ArrayStoreException 如果指定数组的运行时类型不是列表中每个元素的运行时类型的超类型

NullPointerException 如果指定的数组是null

说明

本方法方法由 Collection<E> 接口的 toArray() 规定实现

本方法方法由 List<E> 接口的 toArray() 规定实现

本方法重写了继承自 AbstractCollection<E> 类的 toArray() 方法

返回的数组将是 "安全的", 因为这个列表不会维护对它的引用. 也就是说, 这个方法分配出的是一个新的数组. 因此, 调用者可以自由地修改返回的数组.

示例

直接从数组列表获取数组的示例

package com.yi21.arraylist;

import java.util.ArrayList;

public class Yi21ArraysListToArray {

    public static void main(String[] args) {
        
        ArrayList<String> aList = new ArrayList<>();
        aList.add("Hello");
        aList.add("World");

        Object[] arr = aList.toArray();
        System.out.println("获取拷贝数组元素的数量: " + arr.length + ", 并修改数组元素.");
        arr[1] = "21yi";
    
        System.out.println("输出数组元素:");
        for(Object a: arr) {
            System.out.println((String) a);
        }
    
        System.out.println("输出数组列表元素:");
        aList.forEach(System.out::println);

    }

}

执行结果为 :

获取拷贝数组元素的数量: 2, 并修改数组元素.
输出数组元素:
Hello
21yi
输出数组列表元素:
Hello
World

提供数组参数从数组列表获取数组的示例

package com.yi21.arraylist;

import java.util.ArrayList;

public class Yi21ArraysListToArray2 {

    public static void main(String[] args) {
        
        ArrayList<String> aList = new ArrayList<>();
        aList.add("Hello");
        aList.add("21yi");

        System.out.println("当指定数组容量大于原数组列表:");
        String[] arr = new String[3];
        arr = aList.toArray(arr);
        for(String a: arr) {
            System.out.println(a);
        }


        System.out.println("当指定数组容量小于原数组列表:");
        arr = new String[1];
        arr = aList.toArray(arr);
        for(String a: arr) {
            System.out.println(a);
        }


        System.out.println("修改数组的内容是否影响原数组列表:");
        arr[1] = "World";
        System.out.println("输出数组:");
        for(String a: arr) {
            System.out.println(a);
        }
        System.out.println("输出数组列表:");
        aList.forEach(System.out::println);

    }

}

执行结果为 :

当指定数组容量大于原数组列表:
Hello
21yi
null
当指定数组容量小于原数组列表:
Hello
21yi
修改数组的内容是否影响原数组列表:
输出数组:
Hello
World
输出数组列表:
Hello
21yi