Arrays.asList()的踩坑

      用迭代器实现删除集合元素的时候,遇到了一个问题

 1 public static void main(String[] args) {
 2         String[] ss = {"sys","admin","visa","bude"};
 3         List<String> list = Arrays.asList(ss);
 4        9         Iterator it = list.iterator();
10         while(it.hasNext()){
11             Object obj = it.next();
12             if("visa".equals(obj)){
13                 it.remove();
14             }
15         }
16         System.out.println(list);
17     }

    运行上面一段代码发现,在13行,删除元素的时候会抛出异常UnsupportedOperationException,不支持该操作。

Exception in thread "main" java.lang.UnsupportedOperationException
    at java.util.AbstractList.remove(AbstractList.java:144)
    at Test3.main(Test3.java:13)

    于是,我把新建了一个集合,代替由数组转换成的集合

 1 public static void main(String[] args) {
 2         String[] ss = {"sys","admin","visa","bude"};
 3 //        List<String> list = Arrays.asList(ss);
 4         List<String> list = new ArrayList<String>();
 5         list.add("sys");
 6         list.add("admin");
 7         list.add("visa");
 8         list.add("bude");
 9         Iterator it = list.iterator();
10         while(it.hasNext()){
11             Object obj = it.next();
12             if("visa".equals(obj)){
13                 it.remove();
14             }
15         }
16         System.out.println(list);
17     }

运行结果正常

[sys, admin, bude]

  点开Arrays.asList()的源码发现,asList()这个方法返回的是一个Array$ArrayList对象,而后来 new ArrayList<String>()返回的是一个ArrayList对象。

  Array$ArrayList与ArrayList都继承了AbstractList类,但是Array$ArrayList没有重写父类的remove方法,ArrayList重写了remove方法。所以,通过数组转成的集合无法实现remove操作

原文地址:https://www.cnblogs.com/CSC20190701/p/11118419.html

时间: 2024-10-09 21:27:59

Arrays.asList()的踩坑的相关文章

Arrays.asList()是个坑

在java语言中,把数组转换成List集合,有个很方便的方法就是 List<String> list = Arrays.asList("a","b","c"); 但你可能不知道这样得到的List它的长度是不能改变的.当你向这个List添加或删除一个元素时(例如 list.add("d");)程序就会抛出异常(java.lang.UnsupportedOperationException).怎么会这样?!只需要看看a

Arrays.asList中所遇到的坑

前言 最近在项目上线的时候发现一个问题,从后台报错日志看:java.lang.UnsupportedOperationException异常 从代码定位来看,原来是使用了Arrays.asList()方法时把一个数组转化成List列表时,对得到的List列表进行add()和remove()操作, 所以导致了这个问题. 对于这个问题,现在来总结下,当然会总结Arrays下面的一些坑. 源代码分析 首先,遇到问题不可怕,遇到问题解决就是了,但是必须要保证下次不会再犯相同的问题. Arrays.asL

java之Arrays.asList 的坑

1 引子 public static void main(String[] args) { String[] sArray = {"a", "b", "c", "d", "e"}; List<String> sList = Arrays.asList(sArray); //修改 List, 查看 Array 的值 sList.set(3, "cd"); System.out.

kafka安装和使用远程代码进行访问 ---附踩坑记录

kafka安装和使用java连接远程服务器进行消息的生成与消费 首先要使用kafka,要有jdk和zookeeper的环境 本文在阿里云的centos7环境上进行 jdk版本选择的是1.8.0_181 zookeeper的版本是3.4.12 kafka的版本是2.12-1.1.1 关于kafka命令的介绍 本文不介绍了 只介绍怎么搭建一个kafka单点服务器 以及怎么使用代码 远程连接kafka服务器 下载地址 kafka下载地址 :http://kafka.apache.org/downloa

java神坑系列——Arrays.asList

java神坑系列--第二版 Arrays.asList 数组转list是java程序员经常要用的一个方法,但是这也有一个大坑------上题 这个输出什么 ,很多人期待是[1, 2, 3,4]  .但是 但是并不是.而报编译错误. 掉坑里了吧!看源码 感觉没错呀!可是此ArrayList非彼ArrayList ,    java.util.Arrays.ArrayList.ArrayList 它是array类的一个内部类!掉坑里了吧!哈哈 ing 坑主你好! 如果想用数组转list还要添加数据的

coding++:Arrays.asList() - java.lang.UnsupportedOperationException异常处理

这个异常遇到了才知道坑这么大,坑爹的方法. private String[] otherUserFromArray = new String[]{“3”, “4”, “发放”}; List<String> userFromList = Arrays.asList(otherUserFromArray); 在使用 Arrays.asList()转化数组成为list的时候,生成了ArrayList, 表面上看是 java.util.ArrayList, 实际上是Arrays的内部类 ArrayLi

阿里云磁盘扩容踩坑总结

公司半年前上线一个新的项目,采购了一批阿里云主机,磁盘组成是40G系统盘+100G的数据盘,数据库采用MariaDB Galera Cluster集群部署,由于业务数据量快速增长,导致磁盘存储空间剩余量很少,急需要扩容,先总结整个项目规划中埋下的坑: 1.没有DBA对数据库的容量规划,而前期的运维人员采购时选用100G的SSD云盘: 2.数据库默认使用共享表空间,缺点是删除数据后不释放空间,当数据快速增长后,我们采取了先删除临时表数据的方式来尽量避免暴力扩容,争取在春节期间稳定,删除部分数据后,

Zabbix 踩坑之旅——zabbix触发重启tomcat

一.实验需求 公司tomcat服务经常自动崩溃,导致业务中断,暂时用zabbix对其执行监控,在tomcat崩溃时能够先自动启动,保证业务尽快恢复正常. 二.准备环境 系统环境:CentOS 6.5 IP地址: zabbix-server: 192.168.239.128 zabbix-agent: 192.168.239.130 zabbix的服务端和客户端的安装此处都以rpm包安装,配置略过.agent端上安装好tomcat. 三.开启踩坑之旅--agent端 ① 修改zabbix-agen

Android开发在路上:少去踩坑,多走捷径【转】

作者:gzjay,腾讯MIG无线产品部 高级工程师 最近一朋友提了几个Android问题让我帮忙写个小分享,我觉得对新人还是挺有帮助的,所以有了这个小分享. 1.目前, Android APP开发完成后,通常需要在哪些机型上进行测试? 2.目前, 开发Android APP时,需要考虑的分辨率有哪些? 这两个问题可以合起来回答的. http://developer.android.com/about/dashboards/index.html 源自Google Play的数据,每月都会进行upd