博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
string[] 和 arraylist互转及问题解决
阅读量:5280 次
发布时间:2019-06-14

本文共 2756 字,大约阅读时间需要 9 分钟。

 

 

1,String 数组转成 list<String>

String[] s={"1","2","3","5","6"};List
listA = Arrays.asList(s);

String 数组在转成 list<String>后, 直接对该list进行操作, 会出异常,例如:

public static void main(String[] args) {            String[] s={"1","2","3","5","6"};            List
listA = Arrays.asList(s); listA.add(3,"4"); for(String temp:listA){ System.out.println(temp); } }

运行时会抛出如下异常:

Exception in thread "main" java.lang.UnsupportedOperationException

 at java.util.AbstractList.add(AbstractList.java:148)


原因分析:

在使用Arrays.asList()后调用add,remove这些method时出现java.lang.UnsupportedOperationException异常。这是由于Arrays.asList() 返回java.util.Arrays$ArrayList, 而不是ArrayList。Arrays$ArrayList和ArrayList都是继承AbstractList,remove,add等 method在AbstractList中是默认throw UnsupportedOperationException而且不作任何操作。ArrayList override这些method来对list进行操作,但是Arrays$ArrayList没有override remove(),add()等,所以throw UnsupportedOperationException。 
 
解决方法:
转换为ArrayList,例如上面代码改成如下:
public static void main(String[] args) {            String[] s={"1","2","3","5","6"};            List
listA = Arrays.asList(s); List
listB = new ArrayList
(listA); listB.add(3,"4"); for(String temp:listB){ System.out.println(temp); } }

运行结果:输出 1 2 3 4 5 6

PS: 这里顺便说明一下arraylist 的 remove() add() 特点

1)arraylist add时, 指定了index添加时,原本该index上的位置不会被删除, 而是从index位置上的数据都向右移。

2)arraylist delete时, 删除后, 该位置后面的所有数据自动向左移,所以遍历的时候, index需要-1 才不会漏掉, 或者直接从倒序遍历,

例如如下代码:

public static void main(String[] args) {            String[] s={"1","2","2","3","5","6"};            List
listA = Arrays.asList(s); List
listB = new ArrayList
(listA); for(int i=0;i

运行结果:输出 1 2 3 4 5 6  ,  该原list index=2位置漏掉遍历,所以得到结果不符合预期

改成如下:

public static void main(String[] args) {            String[] s={"1","2","2","3","5","6"};            List
listA = Arrays.asList(s); List
listB = new ArrayList
(listA); //1. Should reduce 1 once remove for(int i=1;i
=0;i--){ if (listB.get(i).equals("2")){ listB.remove(i); } }**/ for(String temp:listB){ System.out.println(temp); } }

运行结果:输出 1 3 4 5 6

 

2, list<String>转成String 数组

String[] b = list.toArray(new String[list.size()]);

 

 3,String数组直接转成string输出

Arrays.toString(数组名)

 

转载于:https://www.cnblogs.com/robbinluobo/p/6515663.html

你可能感兴趣的文章
sql 函数
查看>>
hdu 2807 The Shortest Path 矩阵
查看>>
熟悉项目需求,要知道产品增删修改了哪些内容,才会更快更准确的在该项目入手。...
查看>>
JavaScript 变量
查看>>
java实用类
查看>>
smarty模板自定义变量
查看>>
研究称90%的癌症由非健康生活习惯导致
查看>>
命令行启动Win7系统操作部分功能
查看>>
排序sort (一)
查看>>
Parrot虚拟机
查看>>
Teamcenter10 step-by-step installation in Linux env-Oracle Server Patch
查看>>
Struts2学习(三)
查看>>
Callable和Runnable和FutureTask
查看>>
GitHub 多人协作开发 三种方式:
查看>>
文本域添加编辑器
查看>>
Yum安装MySQL以及相关目录路径和修改目录
查看>>
java获取hostIp和hostName
查看>>
关于web服务器和数据库的各种说法(搜集到的)
查看>>
C# Stream 和 byte[] 之间的转换
查看>>
OMG: daily scrum nine
查看>>