现在的位置: 首页 > 综合 > 正文

Arrays.asList() 返回的list不能add,remove

2013年08月16日 ⁄ 综合 ⁄ 共 1578字 ⁄ 字号 评论关闭

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;
 }
}
 

抱歉!评论已关闭.