【摘要】 Java中数组和List相互转换的常用方式
一、数组转List
1、方式一:循环遍历
这种方式比较简单,也是最容易想到和最常用的方式,但是过程会繁琐一点,该方式转换后得到List后,可以对List进行增删改操作。
测试代码:
代码语言:javascript复制/**
* 使用for循环
*/
@Test
public void testArrayToList1() {
String[] strArr = new String[]{"语文", "数学", "英语", "物理"};
List<String> strList = new ArrayList<>();
// 核心转换代码
for (String value : strArr) {
strList.add(value);
}
System.out.println("转换得到的List为:" strList);
// 对转换后的List进行增、删、改
strList.add("化学");
System.out.println("添加数据后的List为:" strList);
strList.remove("英语");
System.out.println("删除数据后的List为:" strList);
strList.set(2, "生物");
System.out.println("修改数据后的List为:" strList);
}
测试结果:
2、方式二:使用数组工具类 Arrays.asList()
方法
该方式通过使用 Arrays.asList(strArray)
方法将数组转换为List,但是转换后的List不能进行增删操作,只能进行查改,否则抛异常。
测试代码:
代码语言:javascript复制/**
* 使用Arrays.asList(strArray)
*/
@Test
public void testArrayToList2() {
String[] strArr = new String[]{"语文", "数学", "英语", "物理"};
// 核心转换代码
List<String> strList = Arrays.asList(strArr);
System.out.println("转换得到的List为:" strList);
// 对转换后的List进行改、增、删
strList.set(2, "生物");
System.out.println("修改数据后的List为:" strList);
// strList.add("化学");
// System.out.println("添加数据后的List为:" strList);
// strList.remove("英语");
// System.out.println("删除数据后的List为:" strList);
}
测试结果:
执行程序,发现程序在strList.add("化学")
处,抛出异常:UnsupportedOperationException
。
原因解析:
Arrays.asList(strArray)
返回值是java.util.Arrays
类中一个私有静态内部类java.util.Arrays.ArrayList
,它并非java.util.ArrayList
类。java.util.Arrays.ArrayList
类具有set(),get(),contains()等方法,但是不具有添加add()或删除remove()方法,所以调用add()方法会报错。
使用场景:
Arrays.asList(strArray)
方式仅能用在将数组转换为List后,不需要增删其中的值,仅作为数据源读取使用。
3、方式三:使用ArrayList
的构造器
通过ArrayList
的构造器,将Arrays.asList(strArray)
的返回值由java.util.Arrays.ArrayList
转为java.util.ArrayList
。
测试代码:
代码语言:javascript复制/**
* 使用ArrayList构造器
*/
@Test
public void testArrayToList3() {
String[] strArr = new String[]{"语文", "数学", "英语", "物理"};
// 核心转换代码
List<String> strList = new ArrayList<>(Arrays.asList(strArr));
System.out.println("转换得到的List为:" strList);
// 对转换后的List进行改、增、删
strList.set(2, "生物");
System.out.println("修改数据后的List为:" strList);
strList.add("物理");
System.out.println("添加数据后的List为:" strList);
strList.remove("英语");
System.out.println("删除数据后的List为:" strList);
}
测试结果:
使用场景:
需要在将数组转换为List后,对List进行增删改查操作,在List的数据量不大的情况下,可以使用。
4、方式四:使用集合工具类Collections.addAll()
方法
通过Collections.addAll(arrayList, strArray)
方式转换,根据数组的长度创建一个长度相同的List,然后通过Collections.addAll()
方法,将数组中的元素转为二进制,然后添加到List中,这是最高效的方法。
测试代码:
代码语言:javascript复制/**
* 使用集合工具类Collections.addAll()方法
*/
@Test
public void testArrayToList4() {
String[] strArr = new String[]{"语文", "数学", "英语", "物理"};
// 核心转换代码
List<String> strList = new ArrayList<>(strArr.length);
Collections.addAll(strList, strArr);
System.out.println("转换得到的List为:" strList);
// 对转换后的List进行改、增、删
strList.set(2, "生物");
System.out.println("修改数据后的List为:" strList);
strList.add("化学");
System.out.println("添加数据后的List为:" strList);
strList.remove("物理");
System.out.println("删除数据后的List为:" strList);
}
测试结果:
使用场景:
需要在将数组转换为List后,对List进行增删改查操作,在List的数据量巨大的情况下,优先使用,可以提高操作速度。
5、方式五:使用stream的方式
如果是java8以上的版本,可以使用stream的方式进行转换,该方式转换后的List也是支持增删改操作的。
测试代码:
代码语言:javascript复制/**
* 使用stream的方式
*/
@Test
public void testArrayToList5() {
String[] strArr = new String[]{"语文", "数学", "英语", "物理"};
// 核心转换代码
List<String> strList = Stream.of(strArr).collect(Collectors.toList());
System.out.println("转换得到的List为:" strList);
// 对转换后的List进行改、增、删
strList.set(2, "生物");
System.out.println("修改数据后的List为:" strList);
strList.add("化学");
System.out.println("添加数据后的List为:" strList);
strList.remove("物理");
System.out.println("删除数据后的List为:" strList);
}
测试结果:
使用场景:
支持Java8版本及以上的可以使用该方式进行转换。
二、List转数组
1、方式一:循环遍历
这种方式比较简单,也是最容易想到和最常用的方式,转换过程比较繁琐。
测试代码:
代码语言:javascript复制/**
* 使用for循环
*/
@Test
public void testListToArray1() {
List<String> strList = new ArrayList<>();
strList.add("语文");
strList.add("数学");
strList.add("英语");
strList.add("物理");
// 核心转换代码
String[] strArr = new String[strList.size()];
for (int i = 0; i < strList.size(); i ) {
strArr[i] = strList.get(i);
}
System.out.print("转换得到的数组为:");
for (String value : strArr) {
System.out.print(value " ");
}
}
测试结果:
2、方式二:使用集合支持泛型的toArray(T[] a)
方法
测试代码:
代码语言:javascript复制/**
* 使用集合的toArray()方法
*/
@Test
public void testListToArray2() {
List<String> strList = new ArrayList<>();
strList.add("语文");
strList.add("数学");
strList.add("英语");
strList.add("物理");
// 核心转换代码
String[] strArr = strList.toArray(new String[0]);
System.out.print("转换得到的数组为:");
for (String value : strArr) {
System.out.print(value " ");
}
}
测试结果:
3、方式三:使用stream的方式
测试代码:
代码语言:javascript复制/**
* 使用Stream的方式
*/
@Test
public void testListToArray3() {
List<String> strList = new ArrayList<>();
strList.add("语文");
strList.add("数学");
strList.add("英语");
strList.add("物理");
// 核心转换代码
String[] strArr = strList.stream().toArray(String[]::new);
System.out.print("转换得到的数组为:");
for (String value : strArr) {
System.out.print(value " ");
}
}
测试结果: