集合 asList操作 神坑之面试题

本文解析了面试中遇到的关于Arrays.asList()创建List的困惑,展示了双精度数组和包装类型数组的区别,以及如何使两个列表相等并进行遍历。通过源码分析,揭示了asList方法的底层运作和适用场景。

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

在公众号 有朋友给我留言说最近找工作遇到比较坑的面试题 
那么我们就来看看吧


        double [] arr = {1.1, 2.1, 3.2};
        Double[] arrs={1.1,2.1,3.2};
        List list = Arrays.asList(arr);
        List list2 = Arrays.asList(arrs);
        System.out.println(list);
        System.out.println(list.size());
        System.out.println(list==list2);
        System.out.println(list.get(0).getClass());
        System.out.println(list2);
        //两个list 都可以进行遍历吗?


假如 是你在面试 你会回答的出结果是什么吗?
那么我来告诉大家 结果

[[D@2d98a335]
1
false
class [D
[1.1, 2.1, 3.2]
//至于能不能遍历请看下文


大家有猜到为什么吗? 要让他们两个list 相等该怎么办了

其原因 先去看一下这个asList里面做了什么操作 源码如下

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


我们知道,Arrays.asList 方法传入的是一个泛型 T 类型可变参数,最终 double 数组整体作为了一个对象成为了泛型类型 T:
所以得出两个list 不相等 那么它可以进行遍历吗?
现在这种情况 list 是无法进行遍历 而list2 是可以进行遍历输出的
那么如果想让list 遍历 解决方案如下 
 如果使用 Java8 以上版本可以使用 Arrays.stream 方法来转换,

List<Integer> list3 = Arrays.stream(arr).boxed()
.collect(Collectors.toList());


否则可以把 double 数组声明为包装类型 Double 数组:
我们得出来结论 asList() 建议都是用包装类型 当然 asList()坑还有几个 期待下集博文

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

伟子涵

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

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

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

打赏作者

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

抵扣说明:

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

余额充值