转自:http://www.cnblogs.com/jenniferhuang/p/3549845.html
一、String 数组转成 list<String>
利用Arrays类:
String[] str={"1","2","3","5","6"};
List<String> listStr = Arrays.asList(str);
listStr.add("4"); //这里会报错:
//Exception in thread "main" java.lang.UnsupportedOperationException
// at java.util.AbstractList.remove(Unknown Source)
// at java.util.AbstractList$Itr.remove(Unknown Source)
// at java.util.AbstractCollection.remove(Unknown Source)
// at BasicJavaTest.main(BasicJavaTest.java:30)
在使用Arrays.asList()后调用add,remove这些method时出现java.lang.UnsupportedOperationException异常。这是由于Arrays.asList() 返回java.util.Arrays$ArrayList, 而不是java.util.ArrayList。Arrays$ArrayList和ArrayList都是继承AbstractList。但remove、add等修改方法在AbstractList中是默认只throw UnsupportedOperationException而且不作任何操作,Arrays$ArrayList和ArrayList的差别就在于前者没有对这些方法进行重写,后者则有重写这些方法来对list进行实际操作。但其并不是一些人认为的不能修改,类似set(int index, E element)和replaceAll(UnaryOperator operator)这两个方法是可用的。
解决方法是:
String[] str={"1","2","3","5","6"};
List<String> listStr = Arrays.asList(str);
List<String> listStr2 = new ArrayList<String>(Str);
listStr2.add("4");
PS: 这里顺便说明一下arraylist 的 remove()与add() 特点
1)arraylist add时, 指定了index添加时,原本该index上的位置不会被删除, 而是从index位置上的数据都向右移。
2)arraylist delete时, 删除后, 该位置后面的所有数据自动向左移,所以遍历的时候, index需要-1 才不会出现漏数或ArrayIndexOutOfBoundsException,或者直接从倒序遍历。
public static void main(String[] args) {
String[] s={"1","2","2","3","5","6"};
List<String> listA = Arrays.asList(s);
List<String> listB = new ArrayList<String>(listA);
for(int i=0;i<listB.size();i++){
if (listB.get(i).equals("2")){
listB.remove(i);
}
}
for(String temp:listB){
System.out.println(temp);
}
}
输出:1 2 3 4 5 6。 该原list index=2位置漏掉遍历,所以得到结果不符合预期。
改成如下:
public static void main(String[] args) {
String[] s={"1","2","2","3","5","6"};
List<String> listA = Arrays.asList(s);
List<String> listB = new ArrayList<String>(listA);
//1. Should reduce 1 once remove
for(int i=1;i<listB.size();i++){
if (listB.get(i).equals("2")){
listB.remove(i);
i--;
}
}
/**
* 2. reverse traversal
for(int i=listB.size()-1;i>=0;i--){
if (listB.get(i).equals("2")){
listB.remove(i);
}
}**/
for(String temp:listB){
System.out.println(temp);
}
}
二、List<String>转成String 数组
String[] b1 = list.toArray(new String[1]); //这里的参数只为指定返回类型,所以与数组的大小无关
Object[] b2 = list.toArray(); //如果不指定的话,只能以Object[]来接收
三、String数组直接转成string输出
Arrays.toString(数组名)