📜  Java中的 ArrayList 到数组转换:toArray() 方法

📅  最后修改于: 2022-05-13 01:55:02.604000             🧑  作者: Mango

Java中的 ArrayList 到数组转换:toArray() 方法

以下方法可用于将 ArrayList 转换为 Array:

数组列表到数组

方法一:使用 Object[] toArray() 方法

句法:

public Object[] toArray() 

  • 由接口Collection和接口List中的toArray指定
  • 它覆盖类 AbstractCollection 中的 toArray
  • 它以正确的顺序返回一个包含此列表中所有元素的数组。

Java
// Java program to demonstrate working of
// Objectp[] toArray()
import java.io.*;
import java.util.List;
import java.util.ArrayList;
  
class GFG {
    public static void main(String[] args)
    {
        List al = new ArrayList();
        al.add(10);
        al.add(20);
        al.add(30);
        al.add(40);
  
        Object[] objects = al.toArray();
  
        // Printing array of objects
        for (Object obj : objects)
            System.out.print(obj + " ");
    }
}


Java
// A Java program to demonstrate that assigning Objects[]
// to Integer[] causes error.
import java.io.*;
import java.util.List;
import java.util.ArrayList;
  
class GFG {
    public static void main(String[] args)
    {
        List al = new ArrayList();
        al.add(10);
        al.add(20);
        al.add(30);
        al.add(40);
  
        // Error: incompatible types: Object[]
        // cannot be converted to Integer[]
        Integer[] objects = al.toArray();
  
        for (Integer obj : objects)
            System.out.println(obj);
    }
}


Java
// A Java program to convert an ArrayList to arr[]
import java.io.*;
import java.util.List;
import java.util.ArrayList;
  
class GFG {
    public static void main(String[] args)
    {
        List al = new ArrayList();
        al.add(10);
        al.add(20);
        al.add(30);
        al.add(40);
  
        Integer[] arr = new Integer[al.size()];
        arr = al.toArray(arr);
  
        for (Integer x : arr)
            System.out.print(x + " ");
    }
}


Java
// Java program to convert a ArrayList to an array
// using get() in a loop.
import java.io.*;
import java.util.List;
import java.util.ArrayList;
  
class GFG {
    public static void main(String[] args)
    {
        List al = new ArrayList();
        al.add(10);
        al.add(20);
        al.add(30);
        al.add(40);
  
        Integer[] arr = new Integer[al.size()];
  
        // ArrayList to Array Conversion
        for (int i = 0; i < al.size(); i++)
            arr[i] = al.get(i);
  
        for (Integer x : arr)
            System.out.print(x + " ");
    }
}


Java
// Java program to convert a ArrayList to an array
  
// using streams()
  
import java.io.*;
import java.util.List;
import java.util.ArrayList;
  
class GFG {
    public static void main(String[] args)
    {
        List al = new ArrayList();
        al.add(10);
        al.add(20);
        al.add(30);
        al.add(40);
  
        // ArrayList to Array Conversion
        int[] arr = al.stream().mapToInt(i -> i).toArray();
  
        for (int x : arr)
            System.out.print(x + " ");
    }
}


输出
10 20 30 40 

注意:toArray() 方法返回一个 Object(Object[]) 类型的数组。在用作 Integer 对象之前,我们需要将其类型转换为 Integer。如果我们不进行类型转换,我们会得到编译错误。考虑以下示例:

Java

// A Java program to demonstrate that assigning Objects[]
// to Integer[] causes error.
import java.io.*;
import java.util.List;
import java.util.ArrayList;
  
class GFG {
    public static void main(String[] args)
    {
        List al = new ArrayList();
        al.add(10);
        al.add(20);
        al.add(30);
        al.add(40);
  
        // Error: incompatible types: Object[]
        // cannot be converted to Integer[]
        Integer[] objects = al.toArray();
  
        for (Integer obj : objects)
            System.out.println(obj);
    }
}

输出:

19: error: incompatible types: Object[] cannot be converted to Integer[]
        Integer[] objects = al.toArray(); 
                                      ^
1 error

因此,建议创建一个数组,其中需要存储 List 的元素,并将其作为参数传递给 toArray() 方法以存储足够大的元素。否则,将为此目的分配一个相同类型的新数组。

方法二:使用 T[] toArray(T[] a)

// Converts a list into an array arr[] and returns same. 
// If arr[] is not big enough, then a new array of same
// type is allocated for this purpose.
// T represents generic.
public  T[] toArray(T[] arr)

注意有一个数组参数和数组返回值。传递数组的主要目的是告诉数组的类型。返回的数组与传递的数组类型相同。

  • 如果传递的数组有足够的空间,则元素将存储在此数组本身中。
  • 如果传递的数组没有足够的空间,则会创建一个与给定列表具有相同类型和大小的新数组。
  • 如果传递的数组有更多空间,则首先用列表元素填充数组,然后填充空值。

如果 a 的运行时类型不是此列表中每个元素的运行时类型的超类型,则会引发 ArrayStoreException。

Java

// A Java program to convert an ArrayList to arr[]
import java.io.*;
import java.util.List;
import java.util.ArrayList;
  
class GFG {
    public static void main(String[] args)
    {
        List al = new ArrayList();
        al.add(10);
        al.add(20);
        al.add(30);
        al.add(40);
  
        Integer[] arr = new Integer[al.size()];
        arr = al.toArray(arr);
  
        for (Integer x : arr)
            System.out.print(x + " ");
    }
}
输出
10 20 30 40 

注意:如果指定的数组为空,那么它将抛出 NullpointerException。参见这个例子。

方法3:使用get()方法手动转换ArrayList

如果我们不想在内置的 toArray() 方法中使用Java ,我们可以使用此方法。这是将所有 ArrayList 元素复制到 String Array[] 的手动方法。

// Returns the element at the specified index in the list.
public E get(int index)

Java

// Java program to convert a ArrayList to an array
// using get() in a loop.
import java.io.*;
import java.util.List;
import java.util.ArrayList;
  
class GFG {
    public static void main(String[] args)
    {
        List al = new ArrayList();
        al.add(10);
        al.add(20);
        al.add(30);
        al.add(40);
  
        Integer[] arr = new Integer[al.size()];
  
        // ArrayList to Array Conversion
        for (int i = 0; i < al.size(); i++)
            arr[i] = al.get(i);
  
        for (Integer x : arr)
            System.out.print(x + " ");
    }
}
输出
10 20 30 40 

方法4:使用Java 8中集合的streams API转换为原始int类型的数组

我们可以使用 list 和 mapToInt() 的这个 streams() 方法将 ArrayList 转换为原始数据类型 int 的数组

int[] arr = list.stream().mapToInt(i -> i).toArray();

Java

// Java program to convert a ArrayList to an array
  
// using streams()
  
import java.io.*;
import java.util.List;
import java.util.ArrayList;
  
class GFG {
    public static void main(String[] args)
    {
        List al = new ArrayList();
        al.add(10);
        al.add(20);
        al.add(30);
        al.add(40);
  
        // ArrayList to Array Conversion
        int[] arr = al.stream().mapToInt(i -> i).toArray();
  
        for (int x : arr)
            System.out.print(x + " ");
    }
}
输出
10 20 30 40