Arrays.asList的用途转载
原创使用工具类Arrays.asList()将数组转换为集合时,不能使用其方法修改集合。它的add/remove/clear方法将抛出UnsupportOperationException异常 说明:asList的返回对象是Arrays内部类,没有用于实现集合的修改方法。Arrays.asList反映适配器模式,只有转换接口,后台数据仍然是一个数组。 String[] str = new String[]{"1","2"}; List list = Arrays.asList(str); 第一种情况:list.add("x");//运行时异常 第二种情况:str[0] = "unv";//那么list.get(0)也有修改。 此类包含各种用于处理数组的方法,例如排序和搜索。该类还包含一个静态工厂,允许将数组作为列表查看。 除非另有说明,否则如果指定数组引用为 null此类中的方法抛出 NullPointerException。一段有趣的代码如下:
Java代码
public static void main(String[] args) {
int[] data = {1,2,3,4,5};
List list = Arrays.asList(data);
System.out.println("列表中的元素数为:" + list.size());
}
请注意,此处的输出数为1原因是,在Arrays.asList该方法接受一个可变长度参数,通常可以将其视为数组参数,但因为int[] 它本身就是一种类型,所以data当一个变量作为参数传递时,编译器认为只传递了一个变量,该变量的类型为int数组,因此size为1。基本类型不能用作泛型参数。原则上应该使用包装器类型,但这里没有错误,因为数组可以是泛型的,所以在转换之后list有一种类型int的数组
Java代码
: 
int[] data = {1,2,3,4,5};
List list = Arrays.asList(data);
System.out.println("元素类型:" + list.get(0).getClass());
System.out.println("前后相等:"+data.equals(list.get(0)));
正如你所看到的,
输出为元素类型:class [I
前后相等:true
因为jvm不可能的输出array类型,array类型属于java.lang.reflect包,这个通过反射访问数组的类,是在编译时生成的。所以要改变:
Java代码

Integer[] data = {1,2,3,4,5};
List list = Arrays.asList(data);
System.out.println("列表中的元素数为:" + list.size());
输出结果:
列表中的元素数为:5
解释编译器对Integer[] 治疗方法不同。Integer是一个可变长度参数。在传入期间asList()方法实际上是Integer存储数组中的元素。
此外,假设以下代码:
Java代码

//枚举,声明一周
enum Week{Sun,Mon, Tue, Wed,Thu,Fri,Sat}
public static void main(String[] args) {
//工作日
Week[] workDays = {Week.Mon, Week.Tue, Week.Wed,Week.Thu,Week.Fri};
//转换为列表
List list = Arrays.asList(workDays);
//周六也被添加为工作日。
list.add(Week.Sat);
注意这里。add会出错,因为arrays.aslist在中,查看代码以查看此处的返回。ArrayList不是传统意义上的。java.util.arraylist,但它自己的工具类的静态私有内部类,并且不提供add方法,以实现自己的,因此这里有一个错误,除非您确定array.aslist之后长度不会增加,否则请小心:List abc=Arrays.asList("a","b","c"),因为这样的长度已经不可能了add的了.
你们都是经验丰富的开发人员
版权声明
所有资源都来源于爬虫采集,如有侵权请联系我们,我们将立即删除
itfan123


