文章作者:Tyan
博客:noahsnail.com
在Java项目开发过程中,集合之间的互相转换是非常常见的,其中两个比较典型的转换是List和Array之间的转换,本文主要介绍这二者之间的转换、其中存在的一些问题以及解决方案,本文JDK版本为1.8。
1.Array To List
Array To List在Java中的方法是Arrays.asList()方法,这是在Java开发中常用的方法,在一般情况下使用这个方法将Array转为List都没问题,但要对转换后的List进行修改时会出现下面的异常:
1 | Exception in thread "main" java.lang.UnsupportedOperationException |
测试代码为:
1 | public class Test { |
为什么会出现这个错误呢?看一下Arrays.asList()方法的源码及介绍
1 | /** |
注释中第一句话就说了,Arrays.asList()方法返回的是一个固定大小的List,如何来使返回的List可添加或删除元素呢?
方案一:
1 | List<String> list = new ArrayList<String>(Arrays.asList(str)); |
方案二:使用Google Guava,需要import Lists:
1 | List<String> list = Lists.newArrayList(str); |
方案三:使用Apache Commons Collections,需要import CollectionUtils:
1 | List<String> list = new ArrayList<String>(); |
上面三种方案根据项目需要自己选择即可。
2.List To Array
List To Array在Java中的方法是list.toArray()方法,但这个方法有个问题是返回的数组对象为Object[],直接用String[]去强制转换会报语法错误,直接点击toArray()方法去查看源码,当然也可以直接看官方API文档:
1 | /** |
从源码说明中可以看出,如果想要list.toArray()方法返回指定类型的数组,需要在toArray方法中加上一个数组类型的参数,如果参数数组个数大于list数组则将数组中多余的元素赋为空,如果数组大小不够会重新分配一个指定类型与list大小一致的数组。因此,List To Array可以写成:
1 | list.toArray(new String[0]); |