Arrays.asList详解和示例

注意

(1)该方法适用于对象型数据的数组(String、Integer…)

(2)该方法不建议使用于基本数据类型的数组(byte,short,int,long,float,double,boolean)

(3)该方法将数组与List列表链接起来:当更新其一个时,另一个自动更新

(4)不支持add()、remove()、clear()等方法

(5)此方法得到的List长度是不可变的

(6)asList返回的是java.util.Arrays.ArrayList,而不是java.util

传递的数组必须是对象数组,而不是基本类型

public class Demo {
    public static void main(String[] args) {
        int[] myArray = { 1, 2, 3 };
        List myList = Arrays.asList(myArray);
        System.out.println("myList.size():" + myList.size());
        System.out.println("myList.get(0):"+ myList.get(0));

        int [] array=(int[]) myList.get(0);
        System.out.print("array:");
        for (int i = 0; i < array.length; i++) {
            System.out.print(array[i]+",");
        }
        System.out.println();
        System.out.println(myList.get(1));

    }
}

输出结果

myList.size():1
myList.get(0):[I@1b6d3586
array:1,2,3,
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1
	at java.util.Arrays$ArrayList.get(Arrays.java:3841)
	at fking.Demo.main(Demo.java:26)

不支持add()、remove()、clear()等方法

public class Demo1 {
    public static void main(String[] args) {
        List myList = Arrays.asList(1, 2, 3);
//        myList.add(4);//运行时报错:UnsupportedOperationException
//        myList.remove(1);//运行时报错:UnsupportedOperationException
//        myList.clear();//运行时报错:UnsupportedOperationException

    }
}

这三个分别解除注释输出结果

Exception in thread "main" java.lang.UnsupportedOperationException

asList返回的是java.util.Arrays.ArrayList,而不是java.util

public class Demo2 {
    public static void main(String[] args) {
        List myList = Arrays.asList(1, 2, 3);
        System.out.println(myList.getClass());//class java.util.Arrays$ArrayList
    }
}

输出结果

class java.util.Arrays$ArrayList

几种将数组转换为ArrayList

public class Demo3 {
    public static void main(String[] args) {
        //方法一
        List list = new ArrayList<String>(Arrays.asList("a", "b", "c"));

        //方法二使用collect
        Integer [] myArray = { 1, 2, 3 };
        List list2 = Arrays.stream(myArray).collect(Collectors.toList());
        //基本类型也可以实现转换(依赖boxed的装箱操作)
        int [] myArray2 = { 1, 2, 3 };
        List list3 = Arrays.stream(myArray2).boxed().collect(Collectors.toList());

        //方法三
        // 需要导入google guava工具包
        //<dependency>
        //    <groupId>com.google.guava</groupId>
        //    <artifactId>guava</artifactId>
        //    <version>18.0</version>
        //</dependency>

        String[] aStringArray =  new String[]{"a", "b", "c"};
        //不可变数组
        List<String> list4 = ImmutableList.of("string", "elements");  // from varargs
        List<String> list5 = ImmutableList.copyOf(aStringArray);      // from array

        List<String> aStringCollection  = new ArrayList<>();
        aStringCollection.add("a");
        aStringCollection.add("b");
        aStringCollection.add("c");
        //可变数组
        List<String> list6 = Lists.newArrayList(aStringCollection);    // from collection
        List<String> list7 = Lists.newArrayList(aStringArray);               // from array
        List<String> list8 = Lists.newArrayList("or", "string", "elements"); // from varargs

        //方法四
        // 需要导入Apache Commons Collections工具包
        //<dependency>
        //    <groupId>org.apache.commons</groupId>
        //    <artifactId>commons-collections4</artifactId>
        //    <version>4.4</version>
        //</dependency>
        List<String> list9 = new ArrayList<>();
        CollectionUtils.addAll(list9, aStringArray);
    }
}

总结

传递的数组必须是对象数组,而不是基本类型

如果只是用来遍历,就用Arrays.asList()

如果要添加或删除元素,则选择new一个java.util.ArrayList

如果大家对java架构相关感兴趣,可以关注下面公众号,会持续更新java基础面试题, netty, spring boot,spring cloud等系列文章,一系列干货随时送达, 超神之路从此展开, BTAJ不再是梦想!

架构殿堂

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章