Java 集合数组列表的转换小结 asList VS toArray
【摘要】 Java 集合数组列表的转换小结 集合转换为数组toArrayimport java.util.ArrayList;import java.util.Collection;public class ToArrayDemo { public static void main(String[] args) { Collection<String> list = new Ar...
Java 集合数组列表的转换小结
集合转换为数组toArray
import java.util.ArrayList;
import java.util.Collection;
public class ToArrayDemo {
public static void main(String[] args) {
Collection<String> list = new ArrayList<String>();
list.add("one");
list.add("two");
list.add("three");
list.add("four");
// 集合转换为数组
// Collection中定义了两个方法:
// Object[] toArray()
// <T>Y[] toArray(T[] array)
Object[] obj = list.toArray();
for (Object str : obj) {
System.out.println(str);
}
System.out.println("------------------------------");
// 传入的数组长度的区别:若给定的数组长度不足以保存集合中所有的元素时,集合子集创建一个同类型数组,长度和集合长度一致
// 若给定的数组长度大于集合的长度,则使用我们给定的数组。多余的部分数据元素为空
String[] array = list.toArray(new String[5]);
for (String str : array) {
System.out.println(str);
}
System.out.println("------------------------------");
/*
* 返回的数组长度等于列表的长度
*/
String[] array2 = list.toArray(new String[0]);
for (String str : array2) {
System.out.println(str);
}
System.out.println("------------------------------");
/*
* 返回的数组长度等于列表的长度
*/
String[] array3 = list.toArray(new String[1]);
for (String str : array3) {
System.out.println(str);
}
}
}
输出如下:
one
two
three
four
------------------------------
one
two
three
four
null
------------------------------
one
two
three
four
------------------------------
one
two
three
four
数组转换为列表asList
import java.util.Arrays;
public class AsListDemo {
public static void main(String[] args) {
String s[] = { "aa", "bb", "cc" };
ArrayList<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("- - - - - - - - - - -");
Integer ob[] = { 11, 22, 33 };
List<Integer> objList = Arrays.asList(ob); // 数组里的每一个元素都是作为list中的一个元素
for (int a : objList) {
System.out.println(a);
}
System.out.println("- - - - - - - - - - -");
}
}
输出如下:
aa
bb
cc
3
- - - - - - - - - - -
[I@79698539
- - - - - - - - - - -
11
22
33
- - - - - - - - - - -
看来,基本类型的数组无法直接使用asList转换为List。如果你想直接根据基本类型的数组如int[],long[]直接用asList转成list,那么我们可以选择用apache commons-lang工具包里的数组工具类ArrayUtils类的toObject()方法。
原因是什么呢?
Arrays.asList()
函数接收的参数原型其实是泛型变长参数来的,而基本类型是不能作为范型的参数,按道理应该使用包装类型,但这里缺没有报错,因为数组是可以泛型化的,所以转换后在list中就有一个类型为int的数组。
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)