Java中Arrays的asList()方法 可以将 数组转为List ,但是该方法很容易让人犯错或产生误解。
如果将数组作为参数进行传递,基本类型数组将被视为一个对象而不会被解析成数组,因此传递基本类型数组时强烈建议转为其封装类对象的数组 int ->Integer ,long->Long …………。即数组类型必须是 引用类型的。
请看下面例子:
public class demo4 {
public static void main(String[] args) {
// TODO Auto-generated method stub
String s[]={"aa","bb","cc"};
List<String> sList=Arrays.asList(s);
for(String str:sList){//能遍历出各个元素
System.out.println(str);
}
System.out.println(sList.size());//为3
System.out.println("- - - - - - - - - - -");
int i[]={11,22,33};
List intList=Arrays.asList(i); //intList中就有一个Integer数组类型的对象,整个数组作为一个元素存进去的
for(Object o:intList){//就一个元素
System.out.println(o.toString());
}
System.out.println(intList.size());
System.out.println("- - - - - - - - - - -");
Integer ob[]={11,22,33};
List<Integer> objList=Arrays.asList(ob); //数组里的每一个元素都是作为list中的一个元素
for(int a:objList){
System.out.println(a);
}
System.out.println("- - - - - - - - - - -");
int[] intArray = {1,2,3};
List<int[]> myList = Arrays.asList(intArray);
System.out.println(myList.size());
System.out.println(myList.get(0).length);
System.out.println("- - - - - - - - - - -");
}
执行结果:
aa
bb
cc
3
- - - - - - - - - - -
[I@41aff40f
1
- - - - - - - - - - -
11
22
33
- - - - - - - - - - -
1
3
- - - - - - - - - - -
如果将数组作为参数进行传递,基本类型数组将被视为一个对象而不会被解析成数组,因此传递基本类型数组时强烈建议转为其封装类对象的数组 int ->Integer ,long->Long …………。即数组类型必须是 引用类型的。
原因:在Arrays.asList方法中T是参数类型,因此它必须为一个Object 类型,不可以是基本类型。
1.如果你要将一个数组转换为list时仅仅是要将其转换为一个string,那么最好使用Arrays.toString代替上面的方法,即使对于基本类型的数组该方法也不会出现任何问题。
2.如果你打算将一个基本类型的数组转换为所对应的封装类型的list,使用Apache Commons Lang,类似下面这样使用ArrayUtils.toObject:
List<Integer> list = Arrays.asList(ArrayUtils.toObject(
new
int
[] {
1
,
2
}));
请注意:一般情况下推荐使用原始数据类型数组而不是装箱后的原始数据类型列表。
3.如果你打算将一个引用类型的数组转换为list,可以直接使用Arrays.asList:
List<String> list = Arrays.asList(
new
String[] {
"a"
,
"b"
})
;