Arrays.asList()返回的是List,而且是一个定长的List,所以不能转换为ArrayList,只能转换为AbstractList
原因在于asList()方法返回的是某个数组的列表形式,返回的列表只是数组的另一个视图,而数组本身并没有消失,对列表的任何操作最终都反映在数组上. 所以不支持remove,add方法的
测试程序如下:
package test.student;
import static org.junit.Assert.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.junit.Test;
public class ListTest {
@Test
public void list1(){
String name="aaa bb";
List <String> list=Arrays.asList(name.split(" "));
//static <T> List<T>
//asList(T... a)
//Arrays.asList 返回一个固定大小的List Returns a fixed-size list backed by the specified array.
//不能改变数组的大小, 所以不支持remove,add方法的
//Arrays.asList()返回的是List,而且是一个定长的List,所以不能转换为ArrayList,只能转换为AbstractList
assertEquals("aaa",list.get(0));
assertEquals("bb",list.get(1));
//assertEquals("bb",list.remove(1));
// assertEquals("aaa",list.get(0));
}
@Test
public void list2(){
String name="aaa bb";
List <String> list=split(name);
assertEquals("aaa",list.get(0));
assertEquals("bb",list.get(1));
assertEquals("bb",list.remove(1));
assertEquals("aaa",list.get(0));
}
private List<String> split(String name) {
// TODO Auto-generated method stub
/*List <String> list=new ArrayList<String> ();
StringBuilder str=new StringBuilder();
for(int i=0;i<name.length();i++){
char ch=(char) name.charAt(i);
if(!Character.isWhitespace(ch))
str.append(ch);
else
if(str.length()>0){
list.add(str.toString());
str=new StringBuilder();
}
}
if(str.length()>0)
list.add(str.toString());
return list; */
List <String> list=new ArrayList<String> ();
String [] temp=name.split(" ");
for(String str: temp){
list.add(str);
}
return list;
}
}