您的位置:

List.toArray()方法的使用和注意事项

一、 List.toArray()方法的定义

在Java中,List是一个非常重要的数据结构。它提供了一种有序且可重复的集合。而toArray()方法便是List接口定义的方法之一,它可以将List集合转换成一个数组


public Object[] toArray()

toArray()方法不需要传入任何参数,它会返回一个Object类型的数组。由于数组无法动态扩容,该方法返回的类型为Object[],而非T[],T表示泛型类型。

二、 List.toArray()方法的使用

下面我们通过代码,来说明如何使用toArray()方法:


    List<String> list = new ArrayList<>();
    list.add("java");
    list.add("c");
    list.add("python");
    
    Object[] array1 = list.toArray();
    // 输出结果:[Ljava.lang.Object;@7f63425a
    System.out.println(array1);
    
    String[] array2 = list.toArray(new String[0]);
    // 输出结果:[java, c, python]
    System.out.println(Arrays.toString(array2));

如上述代码所示,我们可以通过以下两种方式使用toArray()方法:

  1. 不传入任何参数
  2. 传入一个指定类型的空数组

使用第一种方式时,返回一个Object类型的数组;使用第二种方式时,返回一个泛型类型的数组。如果传入的数组足够大,可以存储List中的所有元素,则将集合中的元素全部拷贝至输入数组中返回。如果传入的数组大小小于List的大小,则返回一个新的数组,其长度等于List的大小。

三、 List.toArray()方法的注意事项

调用toArray方法时需要注意以下几点:

1、要求输入的数组类型正确

toArray方法返回的数组类型由传入参数的类型来确定,如果传入的数组类型不是正确的类型,则可能会导致ClassCastException异常。

2、传入的数组长度合适

如果传入的数组不够大,无法存储List中的所有元素,则toArray()方法会创建一个新的数组返回,其包含所有元素。如果传入的数组过大,则该方法只会在数组中存储List中的元素,并将其余位置置为null。

我们可以通过下面代码来验证传入数组过大的情况:


    String[] array3 = new String[6];
    String[] array4 = list.toArray(array3);
    // 输出结果:[java, c, python, null, null, null]
    System.out.println(Arrays.toString(array4));

以上代码中,我们定义了一个长度为6的数组,实际上List中只有3个元素。所以toArray()方法只会将List中的元素拷贝到数组中,而其余位置被设置为null。

3、传入null数组

如果传入null数组,则toArray()方法会新建一个数组来存储List中的元素。传入null数组的代码如下所示:


    String[] array5 = null;
    String[] array6 = list.toArray(array5);
    // 输出结果:[java, c, python]
    System.out.println(Arrays.toString(array6));

4、toArray()方法永远不会返回null

如果List中的元素为空,则toArray()方法会返回一个长度为0的数组。

通过上述代码示例和注意事项,我们可以很好的理解List.toArray()方法的使用和注意事项。