Java基础之数组与List之间的互相转换
- 1. List转数组
- 1.1 方式一:toArray()
- 1.2 方式二:list.toArray(new String[list.size()])
- 1.3 方式三:list.stream().toArray()
- 1.4 方式四:list.stream().toArray(String[]::new);
- 1.5 方式五:
- 2. 数组转List
- 2.1 方式一:Arrays.asList(strS)
- 2.2 方式二:new ArrayList<>(Arrays.asList(strS))
- 2.3 方式三:使用 Stream
- 2.4 方式四:Collections.addAll(list,strS);
- 3. 附测试代码
- 3.1 list 转数组的代码
- 3.2 数组转list的代码
- 4. 另:数组和集合的遍历
1. List转数组
这些东西都是简单易懂,就是容易忘记,所以下面介绍都是直接给代码
1.1 方式一:toArray()
1.2 方式二:list.toArray(new String[list.size()])
1.3 方式三:list.stream().toArray()
1.4 方式四:list.stream().toArray(String[]::new);
- 下面的
String[]::new
这种写法是Java8的新特性,不明白的自己可以下去看看Java新特性,下面我们的方式五是替换这种方法,方便大家的理解
1.5 方式五:
- 这种方式很少用,我们写出来主要是为了理解:上面方式四
list.stream().toArray(String[]::new);
的这种写法,看完之后应该明白,String[]::new 其实是调用了构造方法,还不是很清楚的,自己下去看看源码再了解一下Lambda表达式就明白了。
2. 数组转List
2.1 方式一:Arrays.asList(strS)
- 需要注意:不能对List进行增删操作
2.2 方式二:new ArrayList<>(Arrays.asList(strS))
2.3 方式三:使用 Stream
2.4 方式四:Collections.addAll(list,strS);
3. 附测试代码
3.1 list 转数组的代码
package com.liu.susu.base.coollection.array;import org.junit.Test;import java.util.ArrayList;
import java.util.List;
import java.util.function.IntFunction;/*** @FileName example1* @Description* @Author susu* @date 2022-03-01**/
public class ListToArray {/*** 方式一:Object[] result = arrayList.toArray();* 对结果 Object[] 不能强转*/@Testpublic void listToArrayTest1(){ArrayList arrayList = new ArrayList();arrayList.add("aa");arrayList.add("cc");arrayList.add("dd");Object[] result = arrayList.toArray();//注意此处不能向下强转成Stringfor (int i = 0; i < result.length; i++) {System.out.println(result[i]);}/********************下面强转报错,返回结果是Object[],不能强转***************************///java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.String;/*String[] array = (String[]) arrayList.toArray();for (String s : array) {System.out.println(s);}*/}/*** 方式二(分写):* String[] strings = new String[list.size()];* list.toArray(strings);*/@Testpublic void listToArrayTest2_1(){List<String> list = new ArrayList<>();list.add("aa");list.add("cc");list.add("dd");String[] strings = new String[list.size()];list.toArray(strings);for (String s : strings) {System.out.println(s);}}/*** 方式二(简写):String[] strings = list.toArray(new String[list.size()]);*/@Testpublic void listToArrayTest2_2(){List<String> list = new ArrayList<>();list.add("aa");list.add("cc");list.add("dd");String[] strings = list.toArray(new String[list.size()]);for (int i = 0; i < strings.length; i++) {System.out.println(strings[i]);}}/*** 方式三:Object[] objects = list.stream().toArray();* 对结果 Object[] 不能强转*/@Testpublic void listToArrayTest3(){List<String> list = new ArrayList<>();list.add("aa");list.add("cc");list.add("dd");Object[] objects = list.stream().toArray();for (Object object : objects) {System.out.println(object);}}/*** 方式四:String[] strings = list.stream().toArray(String[]::new);*/@Testpublic void listToArrayTest4(){List<String> list = new ArrayList<>();list.add("aa");list.add("cc");list.add("dd");String[] strings = list.stream().toArray(String[]::new);for (String s : strings) {System.out.println(s);}}/*** 方式五:对上述方式四的解释*/@Testpublic void listToArrayTest5(){List<String> list = new ArrayList<>();list.add("aa");list.add("cc");list.add("dd");String[] strings2 = list.stream().toArray(new IntFunction<String[]>() {@Overridepublic String[] apply(int value) {return new String[list.size()];}});for (String s : strings2) {System.out.println(s);}System.out.println("==========================================");String[] strings3 = list.stream().toArray(new IntFunction <String[]>() {@Overridepublic String[] apply(int value) {return new String[value];}});for (String s : strings3) {System.out.println(s);}}}
3.2 数组转list的代码
package com.liu.susu.base.coollection.array;import org.junit.Test;import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;/*** @FileName ArrayToList* @Description* @Author susu* @date 2022-03-01**/
public class ArrayToList {@Test/*** 方式一:Arrays.asList(strS)* Arrays.asList(strS)通过这种方式将数组转换为List后,只能作为数据源读取使用* 不能进行增删操作*/public void arrayToListTest1(){String[] strS = {"aa","bb","cc"};List<String> stringList = Arrays.asList(strS);
// stringList.add("dd"); //不能对List增删,只能查改,否则抛异常。for (String s : stringList) {System.out.println(s);}}/*** 方式二:new ArrayList<>(Arrays.asList(strS))* 通过ArrayList的构造器创建:new ArrayList<>(Arrays.asList(strS))* 支持增删操作* 备注:对List进行增删改查操作,在List的数据量不大的情况下,可以使用*/@Testpublic void arrayToListTest2(){String[] strS = {"aa","bb","cc"};ArrayList<String> list = new ArrayList<>(Arrays.asList(strS));list.add("dd");//支持增删操作for (String s : list) {System.out.println(s);}}/*** 方式三Java8:Stream.of(strS).collect(Collectors.toList())* 支持增删操作*/@Testpublic void arrayToListTest3(){String[] strS = {"aa","bb","cc"};List<String> stringList = Stream.of(strS).collect(Collectors.toList());stringList.add("ff");stringList.forEach(System.out::println);}/*** 方式四Java8:Collections.addAll(list,strS);* 支持增删操作* 备注:对List进行增删改查操作,在List的数据量巨大的情况下,优先使用,可以提高操作速度。*/@Testpublic void arrayToListTest4(){String[] strS = {"aa","bb","cc"};
// List<String> list = new ArrayList<>(strS.length);List<String> list = new ArrayList<>();Collections.addAll(list,strS);list.add("mm");for (String s : list) {System.out.println(s);}}}
4. 另:数组和集合的遍历
Java基础之常见遍历方法(一看就懂).