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);

  • 下面的 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[] 不能强转
     */
    @Test
    public void listToArrayTest1(){
        ArrayList arrayList = new ArrayList();
        arrayList.add("aa");
        arrayList.add("cc");
        arrayList.add("dd");

        Object[] result = arrayList.toArray();//注意此处不能向下强转成String
        for (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);
     */
    @Test
    public 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()]);
     */
    @Test
    public 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[] 不能强转
     */
    @Test
    public 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);
     */
    @Test
    public 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);
        }
    }

    /**
     * 方式五:对上述方式四的解释
     */
    @Test
    public void listToArrayTest5(){
        List<String> list = new ArrayList<>();
        list.add("aa");
        list.add("cc");
        list.add("dd");

        String[] strings2 = list.stream().toArray(new IntFunction<String[]>() {
            @Override
            public 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[]>() {
            @Override
            public 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的数据量不大的情况下,可以使用
     */
    @Test
    public 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())
     * 支持增删操作
     */
    @Test
    public 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的数据量巨大的情况下,优先使用,可以提高操作速度。
     */
    @Test
    public 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基础之常见遍历方法(一看就懂).

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@素素~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值