数组和集合的转换

本文解析了如何在Java中通过Arrays.asList()方法将数组转换为集合(如ArrayList),以及如何将集合转换回数组。重点介绍了asList()方法的工作原理,并举例说明了两个转换过程的输出结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. 集合 ===> 数组
ArrayList<Integer> list = new ArrayList<>();
list.add(123);
list.add(456);
System.out.println(list);//[123, 456]
Object[] arr = list.toArray();
for (Object ele : arr) {
    System.out.println(ele);
}
  1. 数组 ===> 集合

String[] strArr = {"abc", "def"};
List<String> strList = Arrays.asList(strArr);
System.out.println(strList);//[abc, def]
  1. 考题:下面语句打印结果是什么?
System.out.println(Arrays.asList(new Integer[]{11,22,33}));
System.out.println(Arrays.asList(new int[]{44,55,66}));

提示:数组工具类Arrays中有关的源码

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

private static class ArrayList<E> extends AbstractList<E>
   implements RandomAccess, java.io.Serializable
{
    private static final long serialVersionUID = -2764017481108945198L;
    private final E[] a;

    ArrayList(E[] array) {
        a = Objects.requireNonNull(array);//如果array为null,则抛出NullPointerException异常
    }
    ...
}













[11, 22, 33]
[ [I@a57993 ]

你答对了吗?

解析:asList(T… a) 的参数是可变参数,可以放入一个参数,也可以放入一个数组,表示多个参数
T表示什么? 表示必须是引用类型
a表示什么? 表示引用类型对象

Arrays.asList(new Integer[]{11,22,33});

参数new Integer[ ]{11,22,33}是一个数组,
它的样子其实是 Integer[ ] itrArr = {new Integer(11),new Integer(22),new Integer(33)}

也就是这个数组里面是3个Integer对象,数组长度为3。
asList()这个方法会把3个对象元素放进ArrayList集合中,ArrayList集合就有三个对象元素,因为对象元素是 Integer 包装类型,会自动拆箱为 int 类型,看起来简洁,所以打印结果就是[11, 22, 33]

Arrays.asList(new int[]{44,55,66});

参数new int[ ]{44,55,66}是一个数组,
它的样子其实是int[] iArr = {44,55,66},也就是这个数组里面是3个int基本类型的数字,数组长度为3。
和上面的new Integer[]{44,55,66}对比,人家new Integer[]{44,55,66}数组元素是对象,而new int[]{44,55,66}数组元素是基本类型,ArrayList集合里的元素需要的是对象元素,你是int基本类型,尽管可以装箱为Integer对象类型,但是把数组中的每个int类型元素都装箱,Java它可不会这么干,太麻烦太费时了!

接着想呀,int[ ]是引用类型,new int[ ]{44,55,66}就是一个对象嘛,把这个对象放进ArrayList集合中太顺理成章了,ArrayList集合就你一个元素对象。因为引用类型的值就是内存地址,所以打印结果就是:[ [I@a57993 ]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值