简述Arrays.asList警示

asList方法顾名思义:转换为集合,接收的是Object变动参数——Arrays.asList(Object... a)

示例:

import java.util.Arrays;
import java.util.List;
public class Test47
{

    public static void main(String[] args)
        throws Exception
    {
        int[] data = {5, 4, 3, 2, 1};
        // 若是int基本类型会把data看作一个整体的元素
        List list = Arrays.asList(data);
        List list2 = new ArrayList<>();
        for (int i = 5; i >= 1; i-- )
        {
            list2.add(i);
        }
        System.out.println("元素类型:" + list.get(0).getClass());
        System.out.println("前后是否相等:" + list.get(0).equals(data));
        System.out.println("元素类型:" + list2.get(0).getClass());
        System.out.println("前后是否相等:" + list2.get(0).equals(data));
        // 8大基本数据类型不能作为泛型参数,要想作为泛型参数需使用对应的包装类型 返回一个固定长度的列表 如源码:
        // public static <T> List<T>  asList(T... a) { return new ArrayList<>(a); }
        // public ArrayList(Collection<? extends E> c) { 
        //    elementData = c.toArray(); 
        //    if ((size = elementData.length) != 0) 
        //    { 
        //        if(elementData.getClass() != Object[].class) 
        //            elementData = Arrays.copyOf(elementData,size, Object[].class); 
        //    } else { this.elementData = EMPTY_ELEMENTDATA; } 
        // }

        System.out.println("列表中的元素数量是:" + list.size());
        // Arrays.asList方法转换成list对象不可更改,如add,remove等方法,源码Arrays创建了一个静态私有内部类ArrayList,但并未实现add方法 如源码:
        // public boolean add(E e) { add(size(), e); return true;}
        // public void add(int index, E element) { throw new UnsupportedOperationException(); }

        list.add(6);
        System.out.println("提示报错");
    }

}

执行结果:

元素类型:class [I
前后是否相等:true
元素类型:class java.lang.Integer
前后是否相等:false
列表中的元素数量是:1
java.lang.UnsupportedOperationException
    at java.util.AbstractList.add(AbstractList.java:148)
    at java.util.AbstractList.add(AbstractList.java:108)
    at com.wxp.test.Test47.main(Test47.java:29)

拓展源码Arrays创建了一个静态私有内部类ArrayList的相关方法

size:元素数量

contains:是否包含某元素

replaceAll:集合里全部替换

indexOf:获取某一元素的下标

set:重置指定某一元素

get:获得指定元素

toArray:转换为数组,实现了数组的浅拷贝

参照来源:《编写高质量代码:改善java程序的151建议》

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值