posts - 36,comments - 0,views - 5003

 

千万不要这样使用Arrays.asList !

测试的几种情况及原因:

复制代码
public static void main(String[] args) {

//第一种基本类型数组 int[] arr = {1,2,3,4}; List list = Arrays.asList(arr); System.out.println(list.size()); //1 // 由于Arrays.ArrayList参数为可变长泛型,而基本类型是无法泛型化的, // 所以它把int[] arr数组当成了一个泛型对象,所以集合中最终只有一个元素arr。 for (int i=0;i<list.size();i++){ System.out.println(i+list.get(i).toString()); }//0[I@1134affc

//第二种字符串数组修改 String[] strArr = {"sha","diao","nv","hai"}; List list2 = Arrays.asList(strArr); strArr[1]="cha"; list2.set(2, "nan"); System.out.println(strArr[1].hashCode()); //98460 System.out.println(list2.get(1).hashCode());//98460 // 由于asList产生的集合元素是直接引用作为参数的数组, // 所以当外部数组或集合改变时,数组和集合会同步变化,这在平时我们编码时可能产生莫名的问题。 System.out.println(Arrays.toString(strArr));//[sha, cha, nan, hai] System.out.println(list2.toString());//[sha, cha, nan, hai]

//第三种list增加、删除操作 String[] strArr1 = {"sha","diao","nv","hai"}; List list1 = Arrays.asList(strArr1); //返回的是Arrays的内部类Arraylist,并不是java.util报里面的, // 这个Arraylist实现了AbstractList但是并没有重载add和remove方法 //AbstractList像一个适配器是直接抛异常的 list1.add("zi"); //UnsupportedOperationException异常 list1.remove("sha"); list1.remove("diao"); System.out.println(list1.toString()); }
复制代码

 

Arrays.asList()源码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
    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);
        }
...}

  

 

posted on   小小鱼儿yz  阅读(325)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示