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

📅  最后修改于: 2020-03-28 11:33:42             🧑  作者: Mango

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

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

语法:

public Object[] toArray()
  • 由接口Collection中的toArray指定
  • 它在类AbstractCollection中重写toArray
  • 它以正确的顺序返回一个包含此列表中所有元素的数组。
    // Java展示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();
            // 打印 array of objects
            for (Object obj : objects)
                System.out.print(obj + " ");
        }
    }

    输出:

    10 20 30 40

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

    // Java程序,把Objects[]赋值给to Integer[]导致错误.
    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[]
            // 无法被转换成类型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)

    // 把一个list,转换成array arr[]
    // T  代表泛型
    public  T[] toArray(T[] arr)

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

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

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

    // Java程序把ArrayList转化成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

    注意:如果指定的数组为null,则它将抛出NullpointerException。

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

    如果我们不想在Java内置的方法中使用toArray(),则可以使用get()方法。这是复制所有ArrayList的手动方法 。

    // 返回在某个index的元素
    public E get(int index)
    // Java展示把ArrayList转换成array
    // 在循环中使用get()
    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到Array转换
            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