首页 > 其他分享 >Arrays.asList()与Collections.unmodifiableList()

Arrays.asList()与Collections.unmodifiableList()

时间:2023-06-26 13:55:31浏览次数:33  
标签:index return Arrays list int Collections public asList size

java.util.Arrays#asList

返回的是在Arrays实现的ArrayList,

 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);
        }

        @Override
        public int size() {
            return a.length;
        }

        @Override
        public Object[] toArray() {
            return a.clone();
        }

        @Override
        @SuppressWarnings("unchecked")
        public <T> T[] toArray(T[] a) {
            int size = size();
            if (a.length < size)
                return Arrays.copyOf(this.a, size,
                                     (Class<? extends T[]>) a.getClass());
            System.arraycopy(this.a, 0, a, 0, size);
            if (a.length > size)
                a[size] = null;
            return a;
        }

        @Override
        public E get(int index) {
            return a[index];
        }

        @Override
        public E set(int index, E element) {
            E oldValue = a[index];
            a[index] = element;
            return oldValue;
        }

        @Override
        public int indexOf(Object o) {
            E[] a = this.a;
            if (o == null) {
                for (int i = 0; i < a.length; i++)
                    if (a[i] == null)
                        return i;
            } else {
                for (int i = 0; i < a.length; i++)
                    if (o.equals(a[i]))
                        return i;
            }
            return -1;
        }

        @Override
        public boolean contains(Object o) {
            return indexOf(o) != -1;
        }

。。。。。。

继承了AbstractList,但并未覆写add方法

// AbstractList中的add方法,调用会抛出UnsupportedOperationException异常
public boolean add(E e) {
        add(size(), e);
        return true;
    }
public void add(int index, E element) {
        throw new UnsupportedOperationException();
    }

但需注意 Arrays.asList()返回的List仅仅是不允许add,但依旧可以执行set,所以若需要保证List中元素不可变,还需调用java.util.Collections#unmodifiableList

java.util.Collections#unmodifiableList

该方法返回UnmodifiableList

static class UnmodifiableList<E> extends UnmodifiableCollection<E>
                                 implements List<E> {
       private static final long serialVersionUID = -283967356065247728L;

       final List<? extends E> list;

       UnmodifiableList(List<? extends E> list) {
           super(list);
           this.list = list;
       }

       public boolean equals(Object o) {return o == this || list.equals(o);}
       public int hashCode()           {return list.hashCode();}

       public E get(int index) {return list.get(index);}
       public E set(int index, E element) {
           throw new UnsupportedOperationException();
       }
       public void add(int index, E element) {
           throw new UnsupportedOperationException();
       }
       public E remove(int index) {
           throw new UnsupportedOperationException();
       }
       public int indexOf(Object o)            {return list.indexOf(o);}
       public int lastIndexOf(Object o)        {return list.lastIndexOf(o);}
       public boolean addAll(int index, Collection<? extends E> c) {
           throw new UnsupportedOperationException();
       }

       @Override
       public void replaceAll(UnaryOperator<E> operator) {
           throw new UnsupportedOperationException();
       }
       @Override
       public void sort(Comparator<? super E> c) {
           throw new UnsupportedOperationException();
       }

       public ListIterator<E> listIterator()   {return listIterator(0);}

。。。。。。

才能确保List中的元素不可变。

并且在声明变量时需 使用final,来确保List引用也不可变

标签:index,return,Arrays,list,int,Collections,public,asList,size
From: https://www.cnblogs.com/qianingmeng/p/17505443.html

相关文章

  • JAVA:Collections类的shuffle()方法
    Java.util.Collections类下有一个静态的shuffle()方法,如下:1)staticvoidshuffle(List<?>list)使用默认随机源对列表进行置换,所有置换发生的可能性都是大致相等的。2)staticvoidshuffle(List<?>list,Randomrand)使用指定的随机源对指定列表进行置换,所有置换发生的可能性......
  • HashMap 、LinkedHashMap 、 Hashtable 、ConcurrentHashMap的使用区别和Collections
    LinkedHashMapLinkedHashMap的使用publicstaticvoidmain(String[]args){ LinkedHashMap<String,Integer>map=newLinkedHashMap<>(); //添加元素 Integerput1=map.put("大文",25); Integerput2=map.put("小文",26); Integer......
  • 运行python -m uiautomator2 init报错AttributeError: module 'collections' has no a
    报错信息:Traceback(mostrecentcalllast):File"E:\Carte\BB\17-SiteLeadership\alte\IonelBalauta\Aryeht\Task1-Traducetotsite-ul\DoarGoogleWeb\Andreea\Meditatii\Sedinta9(2022)(EMAIL)\BEBE-PARSING-Python(fararedenumire2).p......
  • GPU-aware MPI + Python GPU arrays
     condainstall-cconda-forgempi4pyopenmpi  ForLinux64,OpenMPIisbuiltwithCUDAawarenessbutthissupportisdisabledbydefault.Toenableit,pleasesettheenvironmentalvariableOMPI_MCA_opal_cuda_support=truebeforelaunchingyourMPIproc......
  • 2023年6月13日,Collections集合工具类,Properties配置文件类,集合使用小结
    1.Properties配置文件类创建配置文件,DBConfig.properties在src目录下username=rootpassword=123456创建test01类packagecom.wz.properties_class;importjava.io.IOException;importjava.util.Properties;publicclasstest01{/***知识点:配置文件类propertie......
  • 你真的读懂了Java源码?Collections源码初探
    最近重温Java知识,遇到不懂的问题搜索互联网/博客很难直接找到答案,还好如今有了chatGPT,比大多数CV复读机/纯文档翻译的内容更有用。很多文章总结冠以“深入理解xxx”,“万字长文详解xxx”的文章,也不过是演示一遍调用代码,让你知道了怎么用,在什么情况下用。但至于为什么这么用,以及Java......
  • Arrays ——操作数组的工具类
    Arrays——操作数组的工具类方法名说明publicstaticStringtoString(数组)把数组拼接成一个字符串publicstaticintbinarySearch(数组,查找的元素)二分法查找元素publicstaticint[]copyof(原数组,新数组长度)拷贝数组publicstaticint[]copyofRange(......
  • Java_Collections.EMPTY_LIST
     1.背景在某些情况下,我们经常需要发挥一个空的集合对象,比如说在数据查询时,并不需要发挥一个NULL或是异常,那么就可以返回一个空的集合对象。如果你想new一个空的List,而这个List以后也不会再添加元素,那么就用Collections#emptyList()好了。newArrayList()或者newLinked......
  • Arrays:自定义排序规则的方式二
          ......
  • Arrays类:自定义排序规则的方式一
         ......