一、Arrays.asList()
public class ListDemo {
public static void main(String[] args) {
String[] split = "abc,bcd,cde,def".split(",");
List<String> list = Arrays.asList(split);
//list.add("ggg");
list.remove("abc");
System.out.println(list);
}
}
通过Arrays.asList()将数组转换成list,则该list只能进行查改操作,进行增删操作时会抛出如下异常:
Exception in thread "main" java.lang.UnsupportedOperationException
at java.util.AbstractList.remove(AbstractList.java:161)
at java.util.AbstractList$Itr.remove(AbstractList.java:374)
at java.util.AbstractCollection.remove(AbstractCollection.java:293)
at com.lzw.demo6.ListDemo.main(ListDemo.java:12)
我们通过源码可以分析出:
通过此方法返回的是Arrays类里面的一个静态内部类java.util.Arrays.ArrayList,
没用重写add
、remove
方法,因此调用add方法时会抛出异常。
二、通过工具类Collections.addAll()
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class ListDemo2 {
public static void main(String[] args) {
String[] split = "abc,bcd,cde,def".split(",");
List< String> list = new ArrayList<String>(split.length);
Collections.addAll(list,split);
list.add("ggg");
list.remove("abc");
System.out.println(list);
}
}
[bcd, cde, def, ggg]
这方式效率最好,通过Collections.addAll(arrayList, strArray)方式转换,根据数组的长度创建一个长度相同的List,然后通过Collections.addAll()方法,将数组中的元素转为二进制,然后添加到List中。 可以在list数据量较大时使用,可以增加效率。
三、使用java.util.ArrayList
的构造器
package com.lzw.demo6;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class ListDemo3 {
public static void main(String[] args) {
String[] split = "abc,bcd,cde,def".split(",");
List<String> list = new ArrayList<>(Arrays.asList(split));
list.add("ggg");
list.remove("abc");
System.out.println(list);
}
}
此方法可以在小数据量时进行增删盖查,大数据量时效率不高。