Java中数组转为集合List,是很基础常见的,日常开发中也经常会用到,今天整理了下,有5种方法,先列出,再慢慢道来。
1、 List list = Arrays.asList(array);
2、new ArrayList(Arrays.asList(array));
3、Collections.addAll(arraylist, array);
4、for(Element e : array) { list.add(e);}
5、Use Guava :Lists.newArrayList(aStringArray);
1、List list = Arrays.asList(array);
1 2 3 4 5 6 7 8 9 10
| public class TestArray2List { public static void main(String[] args) { String array[] = { "支付宝", "微信", "银联", "聚合" }; List<String> result = convert(array) ; System.out.println(result); } public static List<String> convert(String[] arr) { return Arrays.asList(arr); } }
|
看convert方法,以下几种方法只更改此方法体,方法只做演示,实际开发入参是要判空的,大家写代码的时候要严谨点哦,避免出现异常问题。
运行结果:
[支付宝, 微信, 银联, 聚合]
采坑记:
如果用第一种方法,对转换的结果进行add或remove操作,代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| import java.util.Arrays; import java.util.List; public class TestArray2List { public static void main(String[] args) { String array[] = { "支付宝", "微信", "银联", "聚合" }; List<String> result = convert(array) ; result.add("12306") ; result.remove("聚合") ; System.out.println(result); } public static List<String> convert(String[] arr) { return Arrays.asList(arr); } }
|
会抛出java.lang.UnsupportedOperationException异常,看java api可知:
Arrays.asList(arr) 返回的是一个固定大小的列表,不能对其进行add或remove,看源代码可知,Arrays.asList(arr) 返回的是Arrays的静态内部类,可以通过set方法更改其值。
so,此种方法是有缺陷的,大家注意喽!
2、new ArrayList(Arrays.asList(array));
只更改convert 的方法内容。
1 2 3
| public static List<String> convert(String[] arr) { return new ArrayList<String>(Arrays.asList(arr)); }
|
这种方法就没有第一种方法的那个坑,但它同时创建2个list,有缺陷。
3、Collections.addAll(arraylist, array);
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List; public class TestArray2List { public static void main(String[] args) { String array[] = { "支付宝", "微信", "银联", "聚合" }; List<String> result = convert(array) ; result.add("12306") ; result.remove("聚合") ; System.out.println(result); } public static List<String> convert(String[] arr) { List<String> arraylist = new ArrayList<String>() ; Collections.addAll(arraylist, arr); return arraylist ; } }
|
运行结果:
[支付宝, 微信, 银联, 12306]
此种方法Collections工具的addAll方法,建议使用。
4、for(Element e : array) { list.add(e);}
1 2 3 4 5 6 7
| public static List<String> convert(String[] arr) { List<String> arrayList = new ArrayList<String>(); for (String s : arr) { arrayList.add(s); } return arrayList ; }
|
此种方法通过for循环添加,建议使用。
5、Use Guava :Lists.newArrayList(aStringArray);
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List; import com.google.common.collect.Lists; public class TestArray2List { public static void main(String[] args) { String array[] = { "支付宝", "微信", "银联", "聚合" }; List<String> result = convert(array) ; result.add("12306") ; result.remove("聚合") ; System.out.println(result); } public static List<String> convert(String[] arr) { return Lists.newArrayList(arr) ; } }
|
此种方法,需要引入google Guava的jar包,使用maven的课添加如下依赖:
1 2 3 4 5
| <dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>20.0</version> </dependency>
|
此种方法其实内部使用的也是第三种方法:
1
| Collections.addAll(arraylist, array)
|
所以推荐大家使用第三种、第四种、第五种,可以优先使用 第三种。
OK,大家有兴趣的话可以自己去研究,JDK中东西还蛮多的。