Java toArray方法详解
1. toArray方法的介绍
在Java中,toArray
是一个常用的方法,它用于将集合类(如List、Set等)转换为数组,返回一个包含集合中所有元素的新数组。toArray
方法有两种重载形式:
toArray()
:返回一个包含集合中所有元素的Object类型数组。toArray(T[] a)
:返回一个包含集合中所有元素的指定类型数组。若指定数组大小小于集合的大小,将会创建一个具有相同元素类型和等于集合大小的新数组。若指定数组大小大于集合的大小,将会使用指定数组,超过集合的部分将被设为null。
2. toArray方法的使用示例
下面是一个使用toArray()
方法的示例代码:
List<Integer> numberList = new ArrayList<>();
numberList.add(1);
numberList.add(2);
numberList.add(3);
Object[] numberArray = numberList.toArray();
for (Object number : numberArray) {
System.out.println(number);
}
输出为:
1
2
3
在这个示例中,我们首先创建了一个包含整数的List对象numberList
,然后使用add
方法依次添加了1、2、3这三个整数。接下来,使用toArray
方法将numberList
转换为数组。由于我们没有给定数组的类型,因此返回的是一个Object
类型的数组numberArray
。最后,我们使用增强的for循环遍历数组并打印数组中的每个元素。
下面是一个使用toArray(T[] a)
方法的示例代码:
List<String> fruitList = new ArrayList<>();
fruitList.add("苹果");
fruitList.add("香蕉");
fruitList.add("橙子");
String[] fruitArray = fruitList.toArray(new String[fruitList.size()]);
for (String fruit : fruitArray) {
System.out.println(fruit);
}
输出为:
苹果
香蕉
橙子
在这个示例中,我们首先创建了一个包含水果名称的List对象fruitList
,然后使用add
方法依次添加了几个水果名称。接下来,使用toArray(T[] a)
方法将fruitList
转换为数组。由于我们给定了数组类型为String[]
,并且数组大小等于fruitList
的大小,因此返回的是一个String
类型的数组fruitArray
。最后,我们使用增强的for循环遍历数组并打印数组中的每个水果名称。
3. toArray方法的注意事项
在使用toArray
方法时,我们需要注意以下几点:
3.1. 返回值类型
toArray()
方法返回一个Object
类型的数组。toArray(T[] a)
方法返回一个指定类型的数组。
3.2. 数组类型和大小
- 如果在调用
toArray(T[] a)
方法时,传入的数组大小小于集合的大小,将会创建一个新的数组,并将集合中的元素存储到新数组中。如果传入的数组大小大于等于集合的大小,将会使用该数组,并将多余的部分设为null。 - 在调用
toArray()
方法时,将集合中的元素存储到一个新创建的数组中。
3.3. 数组元素类型
- 若集合的元素类型不是指定数组类型的子类型,将会抛出
ArrayStoreException
异常。
3.4. 修改数组不会影响原集合
在使用toArray
方法得到数组后,对数组进行的任何修改都不会影响原集合。但是,对数组中的元素进行修改将会影响原集合。示例如下:
List<Integer> numberList = new ArrayList<>();
numberList.add(1);
numberList.add(2);
numberList.add(3);
Integer[] numberArray = numberList.toArray(new Integer[numberList.size()]);
numberArray[0] = 4;
for (Integer number : numberList) {
System.out.println(number);
}
输出为:
1
2
3
在这个示例中,我们首先创建了一个包含整数的List对象numberList
,然后使用add
方法依次添加了1、2、3这三个整数。接下来,使用toArray(T[] a)
方法将numberList
转换为数组,并进行了修改:将数组中的第一个元素设为4。最后,我们使用增强的for循环遍历numberList
并打印每个元素,结果显示numberList
并没有受到数组修改的影响。
4. toArray方法的性能分析
在Java中,toArray
方法的总体时间复杂度为O(n),其中n为集合的大小。具体分析如下所示:
- 对于
toArray()
方法,除了将集合中的元素存储到新创建的数组中需要遍历集合一次外,不涉及其他操作,因此时间复杂度为O(n)。 - 对于
toArray(T[] a)
方法,不仅需要将集合中的元素存储到新数组中,还需要拷贝数组元素到指定大小的数组中。因此,除了遍历集合一次外,还需要遍历指定大小的数组一次。其中,拷贝数组元素的时间复杂度为O(n),遍历数组的时间复杂度为O(m),其中m为指定数组的大小。因此,toArray(T[] a)
方法的总体时间复杂度为O(n+m)。
5. 总结
toArray
是一个常用的方法,用于将集合类转换为数组。它有两种重载形式,分别是toArray()
和toArray(T[] a)
。在使用toArray
方法时,我们需要注意返回值类型、数组类型和大小、数组元素类型以及对集合和数组的修改关系。在性能方面,toArray
方法的总体时间复杂度为O(n)或O(n+m),其中n为集合的大小,m为指定数组的大小。