范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

java中List调用remove时报UnsupportedOperationException的原因

  List 在修改时报 java.util.ConcurrentModificationException 的原因和解决方法已经很常见了,一般面试时也会问到,可以参考这篇文章:http://www.cnblogs.com/liuling/p/2013-8-21-04.html,但是今天遇到了另一种异常 UnsupportedOperationException,代码如下:
  public static void main(String[] args) {         List list = Arrays.asList(1,2,3,4,5);         Iterator iterator = list.iterator();         while(iterator.hasNext()){             Integer integer = iterator.next();             if(integer % 2 == 0){                 iterator.remove();             }         }         for(Integer i : list){             System.out.println(i);         } }
  看样子是返回的 list 不支持修改的操作,根据调试结果,实际上程序是运行到了AbstractList 中的 remove 方法中,而可以看到源码中该类下边的几个修改(新增、删除等)方法都是抛出UnsupportedOperationException 的,代码如下:     /**      * {@inheritDoc}      *      * 

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(); } /** * {@inheritDoc} * *

This implementation always throws an * {@code UnsupportedOperationException}. * * @throws UnsupportedOperationException {@inheritDoc} * @throws IndexOutOfBoundsException {@inheritDoc} */ public E remove(int index) { throw new UnsupportedOperationException(); }   这是为什么呢?因为我习惯性的以为 Arrays.asList 返回的是一个 java.util.ArrayList 但实际上并不是,以下是源码: public static List asList(T... a) { return new ArrayList<>(a); } /** * @serial include */ private static class ArrayList extends AbstractList 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[] 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; } @Override public Spliterator spliterator() { return Spliterators.spliterator(a, Spliterator.ORDERED); } @Override public void forEach(Consumer<? super E> action) { Objects.requireNonNull(action); for (E e : a) { action.accept(e); } } @Override public void replaceAll(UnaryOperator operator) { Objects.requireNonNull(operator); E[] a = this.a; for (int i = 0; i < a.length; i++) { a[i] = operator.apply(a[i]); } } @Override public void sort(Comparator<? super E> c) { Arrays.sort(a, c); } }   可以看到返回的实际上是一个静态内部类 ArrayList,而该类虽然继承了 AbstractList,但是并没有 Override 抽象类中关于新增、删除的方法,因此才会抛出 UnsupportedOperationException 异常。   解决方法很简单,把返回的 List 包装一下就行: List list = new ArrayList(Arrays.asList(1,2,3,4,5));   参考:http://blog.csdn.net/liuzhigang1237/article/details/7197074


鲁大师25w以上跑分的主机只要2200不到,绝对适合你山外青山楼外楼,电脑问题找雨星,大家好我是雨星。最近雨星看了一下市场上电脑配件的价格,真的是一天一个价,现在的价格真的让人心动啊,趁着价格合适,给大家带来下面的一款配置,足够大家应为何大众入门车型用AT变速器,而中高端车型却用双离合变速器?相信很多车友对AT变速器都不陌生,随着私家车的普及各类自动挡也同时走入了普通家庭在很多朋友的认知中,AT变速器代表成熟稳定成本高,既然AT变速器代表高成本为何大众却在入门车型上配备变速箱挡位是不是越多越好,为什么变速箱挡位越来越多?记着当年在驾校学车时教练车上的5个挡位都用不完,那个时候觉得市面上具备6个挡位的变速器简直是了不得而如今甚至连6速的变速器都逐渐开始淘汰,而主流的变速器挡位数已经向8910速发展,全球首款5G汽车已上线,上汽R品牌汽车实力不容小觑曾几何时,大家都在盼着5G时代的到来。从手机的更新换代就能看出这一点,在4G刚出来时,就能明显感觉出速度比3G要快很多。而现如今随着5G时代的到来,也让4G的优势没有那么明显。而这汽车以120Km行驶转速多少为合理,发动机转速与哪些因素有关?当车子保持120Km时速行驶发动机多少转速才最为合理?相信这个问题会有很多朋友疑惑那么当车子以120km时速行驶,发动机多少转速才是正常呢?实际上2000转或3000转甚至是400日系车企为何放着稳定的AT变速器不用,却大量使用CVT变速器?现如今私家车已经普及汽车已经走入了大部分的普通家庭,汽车所使用的变速器也在从手动向着自动逐渐过渡,不可否认现如今自动挡车型保有量要远高于手动车型说到自动变速器,常见的无外乎为ATC小米盒子总提示内存不足怎么办?在过去的几年里,小米盒子从1代升级到最新一代,赢得了大量智能电视用户的喜爱。从小编个人的使用经验来看,小米盒子在系统硬件配置UI等各方面都非常出色,但是有个别型号的内存偏小,无法安告诉你电视背后的接口都有什么功能?现在智能电视发展的是越来越快,功能也越来越强大,随着功能的增加,越来越多的接口让很多用户眼花缭乱,那么这些形状各异的接口都有哪些特有功能呢?今天沙发网小编就来给大家详细介绍一些这些沙发管家IPS与VA面板如何选择?不同的电视技术以各自的方式影响着图片质量。液晶面板类型各有优缺点,选择那一种电视取决于你如何使用该电视。今天小编将和大家一起探讨IPS和VA的主要区别,以及它们如何影响画面质量。目沙发管家电视音响应该怎么挑?有哪些讲究?随着智能电视的普及,足不出户就可以在家观看海量大片综艺节目演唱会等等,不用频繁去影院了。不过智能电视也并不是完美的,最大的缺憾就是音质问题。现在为了追求轻薄,电视里已经放不下尺寸稍制作钓鱼网站无门槛,你顶得住吗说起网络诈骗,相信很多小伙伴都不陌生,网络诈骗的手段多种多样,令人防不胜防,笔者身边就有着不少例子。前几年就有一个朋友,被网络诈骗坑害,骗走了20几万,这对于一个年轻人来说,可真不
谁还在消费智能音箱?图片来源视觉中国文丨智能相对论,作者丨佘凯文智能音箱又出事了,肇事者还是Echo。日前,一位美国用户爆料称亚马逊Alex智能语音助手通过她家里的Echo智能音箱向她10岁的孩子提出宁德时代将推出巧克力换电块适配全球80车型金一丹中国证券报中证网中证网讯(记者金一丹)1月18日,宁德时代在换电品牌EVOGO发布会上宣布,专门为实现共享换电开发量产巧克力换电块,具有小而高能自由组合极简设计三大特点。据介区块链中的神拜占庭将军区块链技术的诞生已经有20多年了,其中有许多专有名词,同时也富含着许多有趣的故事,拜占庭将军绝对是这些名词里面最耀眼的一个。拜占庭将军并不是特指某一个人,他们也没啥出彩的地方,但是跨境早知道哥伦比亚取消最高200美元进口增值税豁免PART1今日头条01hr哥伦比亚取消最高200美元进口增值税豁免!跨境购物更加方便近日哥伦比亚政府对未与该国签订自由贸易协定的国家,取消了最高200美元的进口增值税豁免。也就是说避免Amazon帐号被封请了解亚马逊TOS指南在跨境圈混的同行们,应该很了解去年沸沸扬扬的亚马逊封号事件。其实违反亚马逊政策导致封号,一直都是存在的,只不过是看亚马逊下不下重手。想要在这个平台长久地做下去,您都需要遵循亚马逊的京东年货节全民购年货,浙江购买力排名全国第七,看看都买了啥?钱江晚报小时新闻记者鲁佳春节的脚步越来越近,年货采购好了吗?1月18日,小时新闻记者从京东了解到,今年年货节期间,浙江消费者凭借不俗的消费力成功入围国内购买力排行榜前十,排名第7位18个示例详解Spring事务传播机制什么是事务传播机制事务的传播机制,顾名思义就是多个事务方法之间调用,事务如何在这些方法之间传播。举个例子,方法A是一个事务的方法,方法A执行的时候调用了方法B,此时方法B有无事务以新年版雷军请你超大杯即将播出,亚洲跑最快飞人苏炳添主题慢慢来中华网财经1月18日讯,在高龄到达巅峰,是种什么体验?人主要靠运气,还是靠实力?面对压力,死磕还是躺平?今日上午,小米CEO雷军表示推出雷军请你超大杯。雷军称,新年就要到了,这次的华为鸿蒙推广半年,2。2亿花粉升级新系统,问题开始集中暴露文JING审核子扬校正知秋鸿蒙系统发布后,华为一直保持高频率更新,讨论热度居高不下。根据余承东透露,鸿蒙系统登陆手机市场仅半年,已斩获2。2亿用户,成为全球第三大操作系统,成绩着实当下续航极佳的5款手机,出门不用带充电宝,可满足一整天的使用不知道大家发现一个问题没,那就是现在的手机厂商宣传新品的时候很喜欢以屏幕影像系统快充散热等方面,就连设计也能拿出来得瑟一波,所谓的LikePhone风格早就成为历史了。但是呢,你要新型国产操作系统,可在windows安装,用户好用,有点像WPS华为欧拉鸿蒙之后,新型操作系统浮出水面操作系统和芯片一样,都代表着科技的制高点,也引领着未来科技发展走向。这些都是关乎到我们每个人的大事!近几年,国内也不断涌现各类操作系统。比如我