zoukankan      html  css  js  c++  java
  • Arrays.asList()需要注意的点

     

    千万不要这样使用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()源码:
        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);
            }
    ...}
    

      

  • 相关阅读:
    两类斯特林数的整理
    SXOI2019游记
    3.13校内测试
    Python Flask 实现移动端应用接口(API)
    CentOS下实现Flask + Virtualenv + uWSGI + Nginx部署
    iOS组件化开发入门 —— 提交自己的私有库
    Runtime ----- 带你上道
    iOS核心动画以及UIView动画的介绍
    GCD中各种队列和任务执行方式的组合
    iOS消息转发机制和使用
  • 原文地址:https://www.cnblogs.com/jyzyz/p/11015198.html
Copyright © 2011-2022 走看看