Arrays.asList()的使用
JDK文档说明:
@SafeVarargs
public static <T> List<T> asList(T... a)
返回由指定数组支持的固定大小的列表(将返回的列表更改为“写入数组”。)
该方法作为基于数组和基于集合的API之间的桥梁,与Collection.toArray()相结合 。返回的列表是可序列化的,并实现RandomAccess。
此方法还提供了一种方便的方式来创建一个初始化为包含几个元素的固定大小的列表; List<String> stooges = Arrays.asList("Larry", "Moe", "Curly");
参数类型
T - 数组中对象的类
参数
a - 列表将被支持的数组
阿里巴巴开发手册说明:
注意事项:
1,该方法适用于对象型数据的数组(String、Integer…)
2,该方法不建议使用于基本数据类型的数组(byte,short,int,long,float,double,boolean)
3,该方法将数组与List列表链接起来:当更新其一个时,另一个自动更新
4,不支持add()、remove()、clear()等方法
1,当传入一个原生数据类型数组时,Arrays.asList() 的真正得到的参数就不是数组中的元素,而是数组对象本身!此时List 的唯一元素就是这个数组。
int[] myArray = {1, 2, 3};
List myList = Arrays.asList(myArray);
System.out.println(myList.size());//1
System.out.println(myList.get(0));//输出数组地址值
System.out.println(myList.get(1));//ArrayIndexOutOfBoundsException
int[] array = (int[]) myList.get(0);
System.out.println(array[0]);//1
2.用此方法得到的List的长度是不可改变的,
当你向这个List添加或删除一个元素时(例如 list.add(“d”);)程序就会抛出异常(java.lang.UnsupportedOperationException)
List myList = Arrays.asList("a","b","c");
myList.add("d");//UnsupportedOperationException
myList.remove(1);//UnsupportedOperationException
myList.clear();//UnsupportedOperationException
2.1 这是因为Arrays.asList() 方法返回的并不是 java.util.ArrayList ,而是 java.util.Arrays 的一个内部类(java.util.Arrays.ArrayList),这个内部类并没有实现或重写集合的修改方法。
List myList = Arrays.asList("a","b","c");
System.out.println(myList.getClass());//class java.util.Arrays$ArrayList
2.1.1 通过java.util.Arrays$ArrayList部分源码可以看出实现了集合哪些方法:
private static class ArrayList<E> extends AbstractList<E>
implements RandomAccess, java.io.Serializable
{
... @Override
public E get(int index) {
...
} @Override
public E set(int index, E element) {
...
} @Override
public int indexOf(Object o) {
...
} @Override
public boolean contains(Object o) {
...
} @Override
public void forEach(Consumer<? super E> action) {
...
} @Override
public void replaceAll(UnaryOperator<E> operator) {
...
} @Override
public void sort(Comparator<? super E> c) {
...
}
}
3.数组转化为List
3.1数组转化为List的简单方法:
List list = new ArrayList<>(Arrays.asList("a", "b", "c"))
或者:
//JDK9+
Integer[] array = {"a", "b", "c"};
List<Integer> list = List.of(array);
System.out.println(list); /* ["a", "b", "c"] */
/* 不支持基本数据类型 */
3.2通过Stream:
//JDK8+
Integer [] myArray = {"a", "b", "c"};
List myList = Arrays.stream(myArray).collect(Collectors.toList());
//基本类型也可以实现转换(依赖boxed的装箱操作)
int [] myArray2 = {1, 2, 3};
List myList = Arrays.stream(myArray2).boxed().collect(Collectors.toList());
————————————————
版权声明:本文为CSDN博主「生平无冕°」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_40992386/article/details/118329777
最新文章
- 让游戏以高性能GPU(独立显卡)运行
- C#编译执行过程
- Tabular Model下的ADOMD.NET
- Moscow Pre-Finals Workshop 2016. National Taiwan U Selection
- li标签行内元素高度及居中
- SQL通用查询
- MYSQL注入天书之数据库增删改介绍
- java BigInteger类的用法
- winform登陆 记住用户名 代码
- Oracle 数据库启用归档
- C#多线程之旅(7)——终止线程
- 高效开发技巧:为什么你下载Git项目这么慢?
- spark2.1:读取hive中存储的多元组(string,double)失败
- Idea的一些调试技巧
- 阿里云服务器ECS的环境部署和安装
- bootstrap学习一
- 关于java中Stream理解
- Python多线程中阻塞(join)与锁(Lock)的使用误区
- Asp.net中GridView使用详解(引)【转】
- servlet的的生命周期和使用