int数组转 ArrayList对象 Arrays的asList方法

问题

java中 Arrays 工具类中有asList()方法,可以用来将对象数组转换为List对象。但是当我们对基本类型的数组使用时会报错。
Arrays.asList(intarr)报错描述

先放结论

foreach()
Arrays.asList()
listA.toArray()
int[]
Integer[]
List

原因:

Arrays.asList()方法接受的参数为对象数组,当参数是基本类型的数组,会被当做是只有一个元素的对象数组(即该元素是一个基本类型数组),因此报错。

解决方法:

  1. 第一种方法是:使用基本类型的包装类型,即Integer而非intCharacter而非char
  2. 第二种方法是:将数组内元素逐个加入addList

下面演示:

public static void main(String[] args) {

	//错误方法:
	int[] intarr = new int[2];
	List<Integer> intlist= new ArrayList<>();
	// 下面语句报错
	intlist = Arrays.asList(intarr)


	//正确方式1  但是这种方法很奇怪!哪有创建Integer数组的。
	Integer[] integerarr new Integer[2];
	intlist = Arrays.asList(integerarr);


	//正确方式2  手动添加,自动装箱!
	int[] intarr = new int[2];
	List<Integer> intlist = new ArrayList<Integer>() {
	            {
	            // 这里可以添加 内容
	                for (int i :intarr) { add(i); }
	            }
	        };
	}

List转Array,list.toArray()

同理并不能只接转换为基本类型,list.toArray()返回类型为封装后的类型 即Integer ,Character等。
所以需要先转为封装类型再转为基本类型。

public static void main(String[] args) {
		int size =2;
        Integer[] integerarr = new Integer[size];
        List<Integer> intlist= new ArrayList<>();
        int[] intarr = new int[size];

        intlist.add(1);
        intlist.add(2);

        //先转为Integer[]
        integerarr = (Integer[]) intlist.toArray(new Integer[size]);
        //再逐个放入
        for (int i = 0; i < size; i++) {
            intarr[i] = integerarr[i];
        }
        System.out.println(Arrays.toString(intarr));
}

补充内容:
当String数组转 list时候, Arrays.asList()会转成功,但是这样做之后不能对list进行操作。如果添加或删除列表中的元素,程序会抛出异常UnsupportedOperationException。
正确的方法是:ArrayList<Element> arrayList = new ArrayList<Element>(Arrays.asList(array));
详见ArrayList数组互转

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值