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
分类:
java-基础
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?