电子商务网站总体框架设计,企业推广文章,中金超钒 网站建设,全民代理平台Arrays.asList() 详解
【1. 要点】
该方法是将数组转化成List集合的方法。
List list Arrays.asList(“a”,“b”,“c”);
注意#xff1a;
#xff08;1#xff09;该方法适用于对象型数据的数组#xff08;String、Integer…#xff09;
#xff08;2#xff0…Arrays.asList() 详解
【1. 要点】
该方法是将数组转化成List集合的方法。
List list Arrays.asList(“a”,“b”,“c”);
注意
1该方法适用于对象型数据的数组String、Integer…
2该方法不建议使用于基本数据类型的数组byte,short,int,long,float,double,boolean
3该方法将数组与List列表链接起来当更新其一个时另一个自动更新
4不支持add()、remove()、clear()等方法
【2.Arrays.asList()是个坑】
用此方法得到的List的长度是不可改变的
当你向这个List添加或删除一个元素时例如 list.add(“d”);程序就会抛出异常java.lang.UnsupportedOperationException。 怎么会这样只需要看看asList()方法是怎么实现的就行了
public static T ListT asList(T... a) {return new ArrayList(a);}当你看到这段代码时可能觉得没啥问题啊不就是返回了一个ArrayList对象吗问题就出在这里。
这个ArrayList不是java.util包下的而是java.util.Arrays.ArrayList
它是Arrays类自己定义的一个静态内部类这个内部类没有实现add()、remove()方法而是直接使用它的父类AbstractList的相应方法。
而AbstractList中的add()和remove()是直接抛出java.lang.UnsupportedOperationException异常的
public void add(int index, E element) { throw new UnsupportedOperationException();}
public E remove(int index) {throw new UnsupportedOperationException();}
总结如果你的List只是用来遍历就用Arrays.asList()。如果你的List还要添加或删除元素还是乖乖地new一个java.util.ArrayList然后一个一个的添加元素。
【3.示例代码】
package cn.wyc;import java.util.Arrays;
import java.util.List;public class Test {public static void main(String[] args){//1、对象类型(String型)的数组数组使用asList()正常String[] strings {aa, bb, cc};ListString stringList Arrays.asList(strings);System.out.print(1、String类型数组使用asList()正常 );for(String str : stringList){System.out.print(str );}System.out.println();//2、对象类型(Integer)的数组使用asList()正常Integer[] integers new Integer[] {1, 2, 3};ListInteger integerList Arrays.asList(integers);System.out.print(2、对象类型的数组使用asList()正常 );for(int i : integerList){System.out.print(i );}
// for(Object o : integerList){
// System.out.print(o );
// }System.out.println();//3、基本数据类型的数组使用asList()出错int[] ints new int[]{1, 2, 3};List intList Arrays.asList(ints);System.out.print(3、基本数据类型的数组使用asList()出错(输出的是一个引用把ints当成一个元素了));for(Object o : intList){System.out.print(o.toString());}System.out.println();System.out.print( 这样遍历才能正确输出);int[] ints1 (int[]) intList.get(0);for(int i : ints1){System.out.print(i );}System.out.println();//4、当更新数组或者List,另一个将自动获得更新System.out.print(4、当更新数组或者List,另一个将自动获得更新 );integerList.set(0, 5);for(Object o : integerList){System.out.print(o );}for(Object o : integers){System.out.print (o );}System.out.println();//5、add() remove() 报错System.out.print(5、add() remove() 报错 );
// integerList.remove(0);
// integerList.add(3, 4);
// integerList.clear(); }}输出
1、String类型数组使用asList()正常 aa bb cc
2、对象类型的数组使用asList()正常 1 2 3
3、基本数据类型的数组使用asList()出错(输出的是一个引用把ints当成一个元素了)[I1540e19d这样遍历才能正确输出1 2 3
4、当更新数组或者List,另一个将自动获得更新 5 2 3 5 2 3
5、add()、remove()、clear() 报错