Java-List和数组之间的转化

使用ArrayList内部的toArray方法,实现List<String>---->String[]

List接口的方法,ArrayList类,LinkedList类对该方法进行了实现。

由于参数和返回值带泛型,基本数据类型只能是包装类的对象,如Integer[]。

参数:T[] a,表示接收的数组,接收list中的每一个元素
如果a.length<size,就会新创建一个和list大小相同的数组,存储数据。
如果a.length>size,不会创建新数组,从索引0开始赋值到size的大小。
返回值:T[] a;表示返回的对象数组

调用:String[] arr=list.toArray(new String[4]);

public <T> T[] toArray(T[] a) 

示例

List<String> list=new ArrayList<>();
list.add("asdfadsg");
list.add("asdfasdf");
String[] arr=list.toArray(new String[4]);
for(String obj : arr){
    System.out.println(obj);
}

 

底层使用Arrays.copyOf来创建新的数组和System.arraycopy复制,主要的异常错误是arraycopy时的/*java.lang.ArrayStoreException*/。由测试发现。

接收的对象可以是Object类型。进行数组的创建和接收。体现了多态的特点。

接收的对象和list类型相同。

接收的对象是List类型的子类,这时需要向下转型,进行数组的创建和接收。

接收的对象是List类型的父类,和Object区分是由于其底层逻辑判断不同。

由于是数组的复制,所以是深拷贝。

//测试代码

无关类型会报/*java.lang.ArrayStoreException*/

T类型可以是Object类型

如果接收的对象是list的子类型 则必须添加子类的对象,否则/*java.lang.ArrayStoreException*/

List<Object> list1=new ArrayList<>();
        list1.add(new Integer(1));
        list1.add(new Integer(2));
        Integer[] integers=list1.toArray(new Integer[0]);
        for(Object i: integers){
            System.out.println(i);
        }

如果接收的对象是list的父类型

 

String[]----->List<String>

使用的是Arrays.asList方法,底层调用ArrayList的构造函数,但是又有不同

其实是调用Arrays中的静态内部类的构造函数。既然调用了构造函数底层就是深拷贝。

参数是:T[] a表示要转化的数组,默认不能是用int[]类型等未封装的数组,如果需要使用,1、接收的对象需要是集合类型使用int[]作为泛型。2、将其转化为包装类

List<int[]> ints = Arrays.asList(new int[]{1, 2, 3});

返回值:List<T>代表接收的对象。

public static <T> List<T> asList(T... a) {
    return new ArrayList<>(a);
}

示例

Integer[] arr=new Integer[3];
       arr[0]=1;
       arr[1]=2;
       arr[2]=3;
       List<Integer> integerList = Arrays.asList(arr);

List<Integer>----->Integer[]

 Integer[] arr=new Integer[3];
       arr[0]=1;
       arr[1]=2;
       arr[2]=3;
        List<Integer> list1;
        list1=Arrays.asList(arr);
        Integer[] integers = list1.toArray(new Integer[0]);
        for(Integer i: integers){
            System.out.println(i);
        }

Integer[]------>List<Integer>

List<Integer> transList=Arrays.asList(arr);

List<int[]> 转化为 int[][],二维数组可以作为参数,但int[]类型必须封装成Integer[],这里有一个疑点,由于ArrayList中源码只有带泛型的重载toArray方法。没有int[][] 为参数的方法,所以int[]可以视为泛型?而int不行。

return list.toArray(new int[0][]);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值