面试题之数组与List的互相转换

本文介绍了Java中数组与List之间的转换方法,包括使用Arrays.asList()进行数组到List的转换,但该方法返回的列表大小固定;使用Collections.addAll()允许在转换后的List中添加元素;以及如何将List转换为数组的不同方式,如使用list.toArray()和list.toStream.toArray()等。
摘要由CSDN通过智能技术生成
package otherLearnTest;

import org.junit.Test;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;

/**
 * List与数组的相互转换
 */
public class ArrayToListTransform {
    Integer[] integerArray = {11, 22, 33};


    /**
     * 数组转List
     * Arrays.asList
     * asList()方法。这不是最好的,因为asList()返回的列表的大小是固定的
     * 果添加或删除列表中的元素,程序会抛出异常UnsupportedOperationException。
     */
    @Test
    public void asList() {
        List<Integer> list = Arrays.asList(integerArray);
        System.out.println(list);
    }

    /**
     * 使用Collections.addAll
     * 可以添加元素
     */
    @Test
    public void collectionAddAll() {
        List list = new ArrayList();
        Collections.addAll(list, integerArray);
        list.add(3);
        System.out.println(list);
    }

    /**
     * list.toArray(new String[list.size])
     * 这里要注意list类型,和数组的类型是一致的,这里我默认list是string,假如list是Integer类型,那就是list.toArray(new Integer[list.size])
     * 使用toArray,数组空间的大小length:
     * 1.等于0:动态创建与size大小相同的数组,性能最好
     * 2.大于0但是小于size:重新创建大小等于size的数组,增加GC负担
     * 3.等于szie,在高并发的情况下,数组创建完成之后,size正在变大的情况,影响与2一致
     * 4.大小等于size,空间浪费,且在size出插入null值,存在NPE隐患【NPE(Null Pointer Exception)】
     */

    @Test
    public void toArray() {
        List<Integer> integerList = new ArrayList<>();
        integerList.add(11);
        integerList.add(22);
        Integer[] integers = integerList.toArray(new Integer[0]);
        for (Integer integer : integers) {
            System.out.println(integer);
        }

    }

    /**
     * list.toStream.toArray(String[]:new)
     * <p>
     * 同理list是什么类型,后面就是要写什么类型的数组
     */
    @Test
    public void stream() {
        List<Integer> integerList = new ArrayList<>();
        integerList.add(11);
        integerList.add(22);
        Integer[] integers = integerList.stream().toArray((x) -> {
            return new Integer[x];
        });
        for (Integer integer : integers) {
            System.out.println(integer);
        }

    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值