Java ArrayList到Array的转换:toArray()方法

Java ArrayList到Array的转换:toArray()方法

以下方法可用于将数组列表转换为数组:

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

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

语法:

public Object[] toArray()
  • 它在接口Collection和接口List中由toArray指定。
  • 它在类AbstractCollection中重写了toArray。
  • 它返回一个包含该列表中所有元素的数组,且顺序正确。
// 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<Integer> al = new ArrayList<Integer>();
        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 + " ");
    }
}

输出

10 20 30 40 

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

// 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<Integer> al = new ArrayList<Integer>();
        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()方法来存储元素,如果它足够大。否则将为此目的分配一个相同类型的新数组。

方法2:使用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。

// 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<Integer> al = new ArrayList<Integer>();
        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的手动方法

如果我们不想使用java内置的toArray()方法,我们可以使用这个方法。这是一种手动方法,将ArrayList的所有元素复制到字符串Array[]中。

// Returns the element at the specified index in the list.
**public E get(int index)**
// 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<Integer> al = new ArrayList<Integer>();
        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:在java8中使用集合的流API来转换为原始int类型的数组

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

int[] arr = list.stream().mapToInt(i -> i).toArray();
// 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<Integer> al = new ArrayList<Integer>();
        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 

参考资料:

http://docs.oracle.com/javase/1.5.0/docs/api/java/util/ArrayList.html#toArray()

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程