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
Arrays.asList()的使用的更多相关文章
- 【转】java.util.Arrays.asList 的用法
DK 1.4对java.util.Arrays.asList的定义,函数参数是Object[].所以,在1.4中asList()并不支持基本类型的数组作参数. JDK 1.5中,java.util.A ...
- Arrays.asList()注意
api: public static <T> List<T> asList(T... a) 返回一个受指定数组支持的固定大小的列表.(对返回列表的更改会“直接写”到数组.)此方 ...
- Arrays.toString Arrays.asList
import java.util.Arrays; public class TestCalc{ public static void main(String[] args) { ,,,,,,,}; / ...
- Arrays.asList()使用注意点
今天看代码时, 发现书上使用了Arrays.asList()方法, 将一个数组转成了List, 然后说到得到的List不能调用add(), remove()方法添加元素或者删除,带着疑问看了下内部实现 ...
- Arrays.asList(数组) 解说
最近在用Arrays的asList()生成的List时,List元素的个数时而不正确. Java代码 一:Arrays.asList(数组)该方法是将数组转化为集合(该方法主要用于Object对象数组 ...
- Arrays.asList方法总结
import java.util.Arrays; import java.util.List; /** * * 本类演示了Arrays类中的asList方法 * 通过四个段落来演示,体现出了该方法的相 ...
- Arrays.asList的使用及异常问题
将数组转成List问题,通常我们习惯这样写成:List<String> list = Arrays.asList("1","2"); 于是我们这样就 ...
- Arrays.asList引起的惨案
最近代码中需要对两个数组求交,想当然便用到了List中的retainAll函数,但要将将数组转换成list.代码如下: String[] abc = new String[] { "abc& ...
- Arrays.asList的源码分析
以前一直很奇怪为什么Arrays.asList的数组不能插入新的数据,后来看了源码发现是因为内部是一个final的数组支持起来的Arraylist,下面贴入源码与分析. 1.先看Arrays的方法 我 ...
- 【转载】最近在用Arrays的asList()生成的List时,List元素的个数时而不正确,数组转化为List,即Arrays.asList(intArray);
最近在用Arrays的asList()生成的List时,List元素的个数时而不正确. Java代码 //经多次测试,只要传递的基本类型的数组,生成List的元素个数均为1 char arrc = { ...
随机推荐
- 解决linux系统中对两个不同的网络连接http访问
项目5G 问题背景:调用网络端的服务器服务,对本地机器人进行控制,以实现机器人应执行的任务. 需求:主机需要访问外网的API,同时在本地局域网与机器人的API进行通信. 问题:要解决HTTP请求发送到 ...
- Android组件化开发-----页面路由(ARouter)
平时开发中,我们经常用到页面跳转功能.之前我一直使用Intent过跳转 Intent intent = new Intent(A.this, B.class); intent.putExtra(&qu ...
- mi
小米耳机页面 <style> * { margin: 0; padding: 0; } body { width: 1226px; background-color: #f5f5f5; m ...
- APP数据指标体系分析
一.APP的数据指标体系主要分为五个维度,包括用户规模与质量.参与度分析.渠道分析.功能分析和用户属性分析. 1.用户规模和质量 用户规模和质量是APP分析最重要的维度,其指标也是相对其他维度最多,数 ...
- HTML学习笔记2----元素与标签
随笔记录方便自己和同路人查阅. #------------------------------------------------我是可耻的分割线--------------------------- ...
- 简述Linux零拷贝原理
什么是零拷贝 零拷贝描述的是在计算机操作系统中,CPU不执行将数据从一个内存区域,拷贝到另一个内存区域的任务. 通过网络传输文件时,零拷贝通常可以节省CPU周期和内存带宽. 零拷贝的好处 节省了CPU ...
- 设置Redhat终端显示中文
修改.bash_profile,增加: export LC_ALL= export LANG=C source .bash_profile
- continue练习
using System; namespace continue_的练习 { class Program { static void Main(string[] args) { int sum = 0 ...
- Linux中的虚拟文件系统
VFS的概念 LINUX下的文件系统可分为三大块: ①一是上层的文件系统的调用 ②二是虚拟文件系统交换器 ③三是挂载到VFS中各实际文件系统,例如ext2,jffs. VFS确切的叫法是"V ...
- Python生成whl文件
下载源码包,生成whl文件 python setup.py bdist_wheel