操作Arrays.asList的list报UnsupportedOperationException的坑

news/2024/10/30 9:22:59/

Arrays.asList()

将数组转换成List集合

    /*** Returns a fixed-size list backed by the specified array.  (Changes to* the returned list "write through" to the array.)  This method acts* as bridge between array-based and collection-based APIs, in* combination with {@link Collection#toArray}.  The returned list is* serializable and implements {@link RandomAccess}.** <p>This method also provides a convenient way to create a fixed-size* list initialized to contain several elements:* <pre>*     List&lt;String&gt; stooges = Arrays.asList("Larry", "Moe", "Curly");* </pre>** @param <T> the class of the objects in the array* @param a the array by which the list will be backed* @return a list view of the specified array*/@SafeVarargs@SuppressWarnings("varargs")public static <T> List<T> asList(T... a) {return new ArrayList<>(a);}

Arrays.ArrayList

    /*** @serial include*/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);}@Overridepublic int size() {return a.length;}@Overridepublic 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;}@Overridepublic E get(int index) {return a[index];}@Overridepublic E set(int index, E element) {E oldValue = a[index];a[index] = element;return oldValue;}@Overridepublic 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;}@Overridepublic boolean contains(Object o) {return indexOf(o) != -1;}@Overridepublic Spliterator<E> spliterator() {return Spliterators.spliterator(a, Spliterator.ORDERED);}@Overridepublic void forEach(Consumer<? super E> action) {Objects.requireNonNull(action);for (E e : a) {action.accept(e);}}@Overridepublic void replaceAll(UnaryOperator<E> operator) {Objects.requireNonNull(operator);E[] a = this.a;for (int i = 0; i < a.length; i++) {a[i] = operator.apply(a[i]);}}@Overridepublic void sort(Comparator<? super E> c) {Arrays.sort(a, c);}}

UnsupportedOperationException

Arrays.asList创建list,当向这个List添加或删除元素时,会报java.lang.UnsupportedOperationException

image-20230604113823183

从源码中可知,Arrays.asList创建的ArrayList是Arrays的一个静态内部类,其中add、remove、clear方法都是没有实现的。

那么子类没有实现这些方法,肯定是调用了父类的方法

AbstractList.java

 AbstractList.java/*** {@inheritDoc}** <p>This implementation always throws an* {@code UnsupportedOperationException}.** @throws UnsupportedOperationException {@inheritDoc}* @throws ClassCastException            {@inheritDoc}* @throws NullPointerException          {@inheritDoc}* @throws IllegalArgumentException      {@inheritDoc}* @throws IndexOutOfBoundsException     {@inheritDoc}*/public void add(int index, E element) {throw new UnsupportedOperationException();}

很明显直接抛出UnsupportedOperationException

总结

该方法得到的List的长度是不可变的。当向这个List添加或删除元素时,会报java.lang.UnsupportedOperationException

这里注意一下,set()编辑是可以的

如果你的list只是用来遍历,那么可以用Arrays.asList()获得,但是如果你的list还想用添加、删除方法,那么就要放弃Arrays.asList(),使用new ArrayList的方法获得


http://www.ppmy.cn/news/263571.html

相关文章

银行也可以退货?广发自动分期用不完居然可以退?

目前为止&#xff0c;各家银行的分期付款业务流程都有要求&#xff0c;你提前还贷也要交满全额的的服务费。啥意思呢&#xff1f;是你分期付款了24期&#xff0c;可是在12期的那时候想一次还完。 你还要把后边12期的服务费一块儿补好。 &#xff08;谁叫你借了人家钱呢&#x…

广发卡自动分期解读,以免入坑

有没有网友对广发自动分期有比较深入的了解的呀&#xff1f;我在网上搜了一下广发自动分期的资料&#xff0c;褒贬不一&#xff0c;有的说很坑&#xff0c;有的又说好&#xff0c;那我到底还要不要办自动分期呀&#xff1f;好纠结。。。 其实我觉得这个因人而异的吧~萝卜青菜各…

广发卡分期可商户分期啦

用广发卡在指定商户可以刷卡分期啦&#xff01; 商场分期付款是什么&#xff1f; 客户在广发银行签约购买商品或服务时&#xff0c;使用指定方式向我行申请将购买的商品或服务的全部或部分价款分成若干期数&#xff08;月&#xff09;进行支付&#xff0c;经过我行后台实时授…

Redis系列第一篇:ubuntu18.04下源码编译安装Redis 6.2.12

Redis&#xff08;Remote Dictionary Server )&#xff0c;即远程字典服务&#xff0c;是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库&#xff0c;并提供多种语言的API。 Redis是一个key-value存储系统。和Memcached类似&#xff…

OpenCart之分期付款(Profiles)教程

本教程由 opencart中国网站制作&#xff0c;如有转载请注明出处&#xff1a; http://www.opencartchina.com/bbs/topic985.html 如果对opencart感兴趣&#xff0c;也可以加入QQ群&#xff1a;282797742进行讨论。 OpenCart1.5.6版本推出了分期付款(Profiles)功能&#xff0c;它…

尚融宝29-提现和还款

目录 一、提现 &#xff08;一&#xff09;需求 &#xff08;二&#xff09;前端 &#xff08;三&#xff09;后端 1、提现接口 2、回调接口 二、还款 &#xff08;一&#xff09;需求 &#xff08;二&#xff09;前端 &#xff08;三&#xff09;后端 1、还款接口 …

《壁纸 - 大全精选手机壁纸》用户条款

本规则被视为《壁纸 - 大全精选手机壁纸》用户协议的补充协议&#xff0c;是其不可分割的组成部分&#xff0c;与其具有同等法律效力。如本规则与《壁纸 - 大全精选手机壁纸》用户协议存在冲突的&#xff0c;以本规则为准。请您在点击“开通”使用自动续费服务前&#xff0c;仔…

账单分期和最低还款之间的差距你绝对想不到,以广发卡为例子,看看自动分期的好处。

来&#xff0c;先看看什么是账单分期&#xff1a; 信用卡账单分期付款是信用卡分期付款类型中的一种&#xff0c;这种分期付款是指信用卡持卡人使用信用卡刷卡消费后向信用卡中心要求将消费金额分期归还给银行。信用卡账单分期付款是最简单的分期付款方式&#xff0c;您只需要在…