java 数组Array和集合List转换千万要注意 Arrays.asList

1.首先我们看看数组转集合的方法。

数组转集合使用Arrays.asList()方法。首先我们试试把数组转换成集合后调用集合方法

public class Array2List {
    public static void main(String[] args) {
        String[] str = {"aaa", "bbb", "ccc"};
        List<String> list = Arrays.asList(str);
        list.add("ddd");
        System.out.println(list);
        System.out.println("list.get(1) = " + list.get(1));
//        str[1] = "add";
//        System.out.println("new list.get(1) = " + list.get(1));
        for (String newStr : str) {
            System.out.println(newStr  + " ");
        }
    }

产生结果如下:

Exception in thread "main" java.lang.UnsupportedOperationException
	at java.util.AbstractList.add(AbstractList.java:148)
	at java.util.AbstractList.add(AbstractList.java:108)
	at com.ruiMing.Array2List.main(Array2List.java:10)

 说明转换后的数据并不能用集合的方法。

现在我们去掉集合的add方法,改变一下数组内容:

    public static void main(String[] args) {
        String[] str = {"aaa", "bbb", "ccc"};
        List<String> list = Arrays.asList(str);
//        list.add("ddd");
        System.out.println(list);
        System.out.println("list.get(1) = " + list.get(1));
        str[1] = "add";
        System.out.println("new list.get(1) = " + list.get(1));
        for (String newStr : str) {
            System.out.println(newStr  + " ");
        }
    }

输出结果如下:

[aaa, bbb, ccc]
list.get(1) = bbb
new list.get(1) = add
aaa 
add 
ccc 

 发现用了转换集合的方法后再改变数组内容,使用list.get方法得到的内容也随之改变。

在阿里巴巴开发手册上是这样写的:【强制】使用工具类 Arrays.asList()把数组转换成集合时,不能使用其修改集合相关的方
法,它的 add/remove/clear 方法会抛出 UnsupportedOperationException 异常。
说明:asList 的返回对象是一个 Arrays 内部类,并没有实现集合的修改方法。Arrays.asList
体现的是适配器模式,只是转换接口,后台的数据仍是数组。
 String[] str = new String[] { "you", "wu" };
 List list = Arrays.asList(str);
第一种情况:list.add("yangguanbao"); 运行时异常。
第二种情况:str[0] = "gujin"; 那么 list.get(0)也会随之修改。

我们由此明白,所谓数组转集合,实际上还是数组形式存储,改变数组内容也会影响到list。特别注意

要想变成集合,可以:

        String[] str = {"aaa", "bbb", "ccc"};
        List<String> list = new ArrayList<>(Arrays.asList(str));

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值