Java数组转集合之Arrays.asList()用法
Arrays.asList()用法
使用Arrays.asList()的原因无非是想将数组或一些元素转为集合,而你得到的集合并不一定是你想要的那个集合。
而一开始asList的设计时用于打印数组而设计的,但jdk1.5开始,有了另一个比较更方便的打印函数Arrays.toString(),于是打印不再使用asList(),而asList()恰巧可用于将数组转为集合。
public class App { public static void main(String[] args) { List<String> stringA = Arrays.asList("A"); String[] stringArray = {"B"}; List<String> stringB = Arrays.asList(stringArray); System.out.println(stringA); System.out.println(stringB); } }
运行结果
[A] [B]
public class App { public static void main(String[] args) { int[] intarray = {1, 2, 3, 4, 5}; //List<Integer> list = Arrays.asList(intarray); 编译通不过 List<int[]> list = Arrays.asList(intarray); System.out.println(list); } } output: [[I@66d3c617]
你是不是以为上面 👆那个 list 是 java.util.ArrayList ?
实际上返回的是:java.util.Arrays.ArrayList
源码:
但它和ArrayList貌似很像唉!有什么不同吗?
不同之处:
Arrays.ArrayList 是工具类 Arrays 的一个内部静态类,它没有完全实现List的方法,而 ArrayList直接实现了List 接口,实现了List所有方法。
-
长度不同 和 实现的方法不同
Arrays.ArrayList是一个定长集合,因为它没有重写add,remove方法,所以一旦初始化元素后,集合的size就是不可变的。
-
参数赋值方式不同
Arrays.ArrayList将外部数组的引用直接通过“=”赋予内部的泛型数组,所以本质指向同一个数组。
ArrayList是将其他集合转为数组后copy到自己内部的数组的。
所以使用Arrays.asList()需要注意以下两点。
一、不能把基本数据类型转化为列表
仔细观察可以发现asList接受的参数是一个泛型的变长参数,而基本数据类型是无法泛型化的,如下所示:
public
class
App {
public
static
void
main(String[] args) {
int
[] intArray = {
1
,
2
,
3
,
4
};
List<Integer> list = Ints.asList(intArray);
list.set(
0
,
100
);
System.out.println(Arrays.toString(intArray));
list.add(
5
);
list.remove(
0
);
}
}
这是因为把int类型的数组当参数了,所以转换后的列表就只包含一个int[]元素。
要想把基本数据类型的数组转化为其包装类型的list,可以使用guava类库的工具方法,示例如下:
int[] intArray = {1, 2, 3, 4}; List<Integer> list = Ints.asList(intArray);
支持基础类型的方式
1、如果使用Spring
2、如果使用Java 8
数组转ArrayList
1、遍历转换
2、使用工具类
3、如果使用Java 8
既可以用于基本类型也可以返回想要的集合。
自己比较常用
int a [] ={1,2,3}; List<Integer> ilist = Arrays.stream(a).boxed() .collect(Collectors.toList()); System.out.println(ilist);
4、两个集合类结合
作者:AlexZS
来源链接:https://www.cnblogs.com/alomsc/p/10996223.html