阅读背景:

关于Arrays.asList(T... a)方法的使用注意事项

来源:互联网 
import java.util.Arrays;
import java.util.List;

public class ArraysDemo {
	
	public static void main(String[] args) {
		
//		Arrays.asList(T... a)
		
		int[] data = {1, 2, 3};
		List list = Arrays.asList(data);

		System.out.println("list size = " + list.size());	//1
		/**
		 * 上一行代码会输出:list size = 1,而不是3。原因是在Arrays.asList(T... a)
		 * 其接收的参数类型是泛型可变参数的。而基本数据类型是不能作为泛型的参数的。
		 * 按道理应该使用包装类型,但这里没有报错??
		 * 因为数组是可以泛型化的,所以转换后在List中就有一个类型为int的数组。
		 * 
		 * 总结:该方法对于基本数据类型的数组支持的不够好,当数组是基本数据类型时不建议使用。
		 */
		System.out.println(list.get(0).getClass());
		
		System.out.println("-----------------------------");
		
		Integer[] values = {1, 2, 3, 4};
		List<Integer> listVal = Arrays.asList(values);
		
		System.out.println("listVal size = " + listVal.size());
		
		listVal.set(0, 8);	//更新操作
		for(Integer in : listVal){
			System.out.print(in + " ");
		}
		
		listVal.add(5);	// java.lang.UnsupportedOperationException
		/**
		 * 执行add()方法会发生异常,查看源码可以知道这里的ArrayList并不是java.util.ArrayList了,
		 * 而是Arrays中的私有静态内部类,并没有提供add方法。
		 * 所以除非确信array.aslist后长度不会增加,否则谨慎使用。
		 */
	}
}
import java.util.Arrays;
import java.util.List;



你的当前访问异常,请进行认证后继续阅读剩余内容。

分享到: