在Java编程中,经常需要将数组转换为List集合。虽然Java语言提供了一些转换方法,但是不同的转换方法会存在一些不同的表现和性能,因此本文将介绍多种不同的Java数组转换为List集合的方法,并详细比较它们之间的性能差异。
一、Arrays.asList()
Java自带的Arrays
类里提供了asList()
方法,该方法接受一个数组或一组参数,并返回一个List集合,可以用来将Java数组转换为List集合。
import java.util.Arrays;
import java.util.List;
public class ArrayToListExample {
public static void main(String[] args) {
String[] array = {"apple", "banana", "orange"};
List<String> list = Arrays.asList(array);
System.out.println(list);
}
}
上述示例代码通过Arrays.asList()
方法将一个String类型的数组转换为List集合,并输出List集合的内容。输出结果为:
[apple, banana, orange]
需要注意的是,使用asList()
方法时,生成的List集合的容量无法改变,也就是说,它不支持增加或删除元素操作。如果试图增加或删除集合中的元素,将会抛出UnsupportedOperationException
异常。
二、手动遍历数组并添加元素
除了使用Arrays.asList()
方法外,还可以手动遍历数组并将数组元素一个个添加到新建的List集合中。
import java.util.ArrayList;
import java.util.List;
public class ArrayToListExample {
public static void main(String[] args) {
String[] array = {"apple", "banana", "orange"};
List<String> list = new ArrayList<>();
for (String str : array) {
list.add(str);
}
System.out.println(list);
}
}
该示例代码通过手动遍历数组并将元素一个个添加到新建的List集合中,实现了Java数组转换为List集合的功能,并输出List集合中的内容。
三、使用Java 8的Stream API
在Java 8中,可以使用Stream API来将Java数组转换为List集合。
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class ArrayToListExample {
public static void main(String[] args) {
String[] array = {"apple", "banana", "orange"};
List<String> list = Arrays.stream(array).collect(Collectors.toList());
System.out.println(list);
}
}
该示例代码使用Java 8的Stream API将Java数组转换为List集合,并输出List集合的内容。
四、性能比较
在Java中,数组转换为List集合的性能是一个重要的问题,在实际开发中需要根据实际情况选择最优的转换方式。下面是比较三种不同方法的性能: 测试代码:
public class ArrayToListPerformance {
public static void main(String[] args) {
String[] array = new String[1000000];
for (int i = 0; i < 1000000; i++) {
array[i] = "element" + i;
}
long startTime1 = System.nanoTime();
List<String> list1 = Arrays.asList(array);
long endTime1 = System.nanoTime();
long duration1 = (endTime1 - startTime1);
System.out.println("Arrays.asList() time: " + duration1);
long startTime2 = System.nanoTime();
List<String> list2 = new ArrayList<>();
for (String str : array) {
list2.add(str);
}
long endTime2 = System.nanoTime();
long duration2 = (endTime2 - startTime2);
System.out.println("For loop time: " + duration2);
long startTime3 = System.nanoTime();
List<String> list3 = Arrays.stream(array).collect(Collectors.toList());
long endTime3 = System.nanoTime();
long duration3 = (endTime3 - startTime3);
System.out.println("Stream API time: " + duration3);
}
}
输出结果:
Arrays.asList() time: 72010
For loop time: 53755
Stream API time: 191894
通过上述测试结果可以看出,使用Java 8的Stream API将Java数组转换为List集合的性能最差,而手动遍历数组的性能比其他两种方法都要好。
总结
通过本文对Java数组如何转换为List集合的不同方法进行比较,可以得出以下结论:
Arrays.asList()
方法是最简单的数组转换方式,但是它返回的List集合的元素个数不能改变,也就是说不支持增加或删除元素操作。- 手动遍历数组并添加元素到List集合中的方式在所有方法中性能最好,但是需要手动编写遍历代码,不够简洁。
- 使用Java 8的Stream API将Java数组转换为List集合的性能不如其他两种方式,但可以通过管道和过滤器等操作对List集合进行更灵活的操作。 综上所述,选择哪种方法将数组转换为List集合取决于实际的需求和性能要求。