浅谈Arrays.asList()的使用及性质

Arrays.asList()
是将数组作为列表
该方法是将数组转化为list。有以下几点需要注意:
  (1)该方法不适用于基本数据类型(byte,short,int,long,float,double,boolean)
  (2)该方法将数组与列表链接起来,当更新其中之一时,另一个自动更新
  (3)不支持add和remove方法
Arrays.asList().//simply a static method
– A creator implemented as a static method is often called a factory method.


public class Test {

   
public static void main(String[] args) {

       
int[] a = {1,2,3,4};

       
List list = Arrays.asList(a);

System.out.println(list.size()); 
//1

    }
}

 

期望的输出是 list里面也有4个元素,也就是size为4,然而结果是1.

原因如下:

在Arrays.asList中,该方法接受一个变长参数,一般可看做数组参数,但是因为int[] 本身就是一个类型,所以a变量作为参数传递时,编译器认为只传了一个变量,这个变量的类型是int数组,所以size为1,相当于是List中数组的个数。基本类型是不能作为泛型的参数,按道理应该使用包装类型,但这里缺没有报错,因为数组是可以泛型化的,所以转换后在list中就有一个类型为int的数组

返回一个受指定数组支持的固定大小的列表。(对返回列表的更改会“直写”到数组。)此方法同 Collection.toArray 一起,充当了基于数组的 API 与基于 collection 的 API 之间的桥梁。返回的列表是可序列化的.

所以,如果是创建多个列表,在传参数时候,最好使用Arrays.copyOf(a)方法,不然,对列表的更改就相当于对数组的更改。


package com.shanheyongmu.test;

 

import java.util.Arrays;

import java.util.List;

 

abstract public class AsllistTest {

 

   
public static void main(String[] args) {

       
String[] s = {"aa","bb","cc"};

       
List strlist = Arrays.asList(s);

       
for(String str:strlist){

           
System.out.println(str);

       
}

       
System.out.println("------------------------");

       
//基本数据类型结果打印为一个元素

       
int[] i ={11,22,33}; 

       
List intlist = Arrays.asList(i);

       
for(Object o:intlist){

           
System.out.println(o.toString());

       
}

       
System.out.println("------------------------");

       
Integer[] ob = {11,22,33};

       
List oblist = Arrays.asList(ob);

       
for(int a:oblist){

           
System.out.println(a);

       
}

       
System.out.println("------------------------");

    }

}

 
``

 

输出结果

aa

bb

cc

----------------

[I@2524e205

---------分割线----------

22

--------------------

你可能感兴趣的:(软件构造)