1.String转List
String str = "red,blue,yellow";
List<String> list = new ArrayList<>(Arrays.asList(str.split(",")));
System.out.println("list---before:" + list);
list.remove("red");
System.out.println("list---after:" + list);
List<String> list1 = Arrays.asList(str.split(","));
System.out.println("list1---before:" + list1);
list1.remove("red");
System.out.println("list1---after:" + list1);
控制台打印结果:
list---before:[red, blue, yellow]
list---after:[blue, yellow]
list1---before:[red, blue, yellow]
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 cn.avisoft.admin.Demo.main(Demo.java:18)
Arrays.asList()方法,查看源码可以发现,
@SafeVarargs
@SuppressWarnings("varargs")
public static <T> List<T> asList(T... a) {
return new ArrayList<>(a);
}
返回一个ArrayList,但这里的ArrayList是java.util.Arrays.ArrayList,不是我们常用的java.util.ArrayList,它是Arrays类的一个内部类,声明如下:
public class ArrayList<E> extends AbstractList<E>
implements List<E>, RandomAccess, Cloneable, java.io.Serializable
继承AbstractList类,它并没有实现add()和remove(),所以当我们调用remove()时,实际上调用的是AbstractList的remove(),
public E remove(int index) {
throw new UnsupportedOperationException();
}
参数是索引,而非string,索引会抛出UnsupportedOperationException()异常。
所以需要将Arrays.asList()产生的List放入java.util.ArrayList中即可,即
List<String> list = new ArrayList<>(Arrays.asList(str.split(",")));
2.List转String
String s = String.join(",", list);