List<String>转为String[]数组,String[]数组转为List<String>

1.Java(基本数据类型)数组转List简述
2.List转Java(基本数据类型)数组简述
3.List<String>转为String[]数组,String[]数组转为List<String>

1.两者的区别

结构方面:

List< String >:泛型,非定长,可变。
在这里插入图片描述

String[]:数组,定长,不可变。
在这里插入图片描述

2.1 两者的互相转换Arrays.asList

@Test
    public void test1(){
                //定义一个字符长度为5的字符串
                String[] strings = new String[5];
                strings[0] = "a";
                strings[1] = "b";
                strings[2] = "c";
                strings[3] = "d";
                strings[4] = "e";

                //调用Arrays中的asList方法将String[]转化为List
                List<String> list = Arrays.asList(strings);
//                list.add("s");
                System.out.println("list:"+list.toString());

                //调用toArray方法将List转化为String[]
                String[] strs1 = list.toArray(new String[]{});// 方式一
                String[] strs2 = list.toArray(new String[0]);// 方式一变形
                String[] strs3 = list.toArray(new String[list.size()]);// 方式二
                System.out.println("String[]:"+Arrays.toString(strs1));
    }

输出的结果为:

list:[a, b, c, d, e]
String[]:[a, b, c, d, e]
Process finished with exit code 0

2.2 两者的互相转换Stream的更优写法

        String[] temp = new String[3];
        temp[0] = "1";
        temp[1] = "2";
        temp[2] = "3";
        //转换为Stream
        Stream<String> stream = Arrays.stream(temp);
        List<String> list = stream.collect(Collectors.toList());
        System.out.println(list);
        //新增344
        list.add("344");
        System.out.println(list);

输出的结果为:

[1, 2, 3]
[1, 2, 3, 344]

值得注意的是
List list = Arrays.asList(strings);
由String数组转为的List的list对象,不可以用add这个参数,不然会报UnsupportedOperationException异常,原因asList是通过新建一个ArrayList来接收String[]的数值。这个ArrayList不是,我们熟悉的那个ArrayList,也就是可以通过add,remove方法进行操作的ArrayList,如下图,很明显,这并不是ArrayList类,而是Arrays里面新建了一个内部类ArrayList,而这个内部类是继承于AbstractList类,AbstractList类里面的add方法是会抛出UnsupportedOperationException异常的。

你可能感兴趣的:(java,字符串)