见代码:
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
/**
* 将数组转成list
* @author gcc
*
* 2018年1月15日
*/
public class ArrayToList {
public static void main(String[] args) {
//定义一个数组
Object[] objarray = new Object[] {"12",34,"99"};
//直接调用Arrays中的asList方法
List<Object> list1 = new ArrayList<Object>(Arrays.asList(objarray));
System.out.println("list1===="+list1.size());
List<Object> list2 = Arrays.asList(objarray);
//不能够调用add和remove方法 会抛出异常
// list2.add("ss");
List<Object> list3 = new ArrayList<Object>();
//使用Collections中的addAll方法 可以转成真正的list 可以调用add和remove方法
Collections.addAll(list3, objarray);
System.out.println("list3-1 is size "+list3.size());
list3.add("00099");
System.out.println("list3-2 is size "+list3.size());
}
}
调用asList方法然后在调用list中的add和remove方法抛出异常的原因:
1、这样做生成的list,是定长的。也就是说,如果你对它做add或者remove,都会抛UnsupportedOperationException。
2、如果修改数组的值,list中的对应值也会改变
Arrays.asList() 返回的是Arrays内部静态类,而不是Java.util.ArrayList的类。这个java.util.Arrays.ArrayList有set(),get(),contains()方法,但是没有任何add() 方法,所以它是固定大小的。
如果希望避免这两个坑,请改用这个方式
Collections.addAll(arraylist, array);