首页 > 其他分享 >Arrays.asList()把数组转换成集合时,不能使用其修改集合相关的方法

Arrays.asList()把数组转换成集合时,不能使用其修改集合相关的方法

时间:2023-10-21 21:58:02浏览次数:34  
标签:Arrays ArrayList add 集合 方法 asList

Arrays.asList()把数组转换成集合时,不能使用其修改集合相关的方法,此处测试代码如下,这里使用add方法:

1 public class main {
2     public static void main(String[] args) {
3         int[] num = {1,2,3};
4         List list = Arrays.asList(num);
5         list.add(4);
6     }
7 }

在idea运行会提示UnsupportedOperationException,追踪源码进行分析

1.首先Arrays.asList()得到的列表是Arrays类中的内部类ArrayList,源码如下

 1 public static <T> List<T> asList(T... a) {
 2         return new ArrayList<>(a);
 3     }
 4 
 5     /**
 6      * @serial include
 7      */
 8     private static class ArrayList<E> extends AbstractList<E>
 9         implements RandomAccess, java.io.Serializable
10     {
11         //ArrayList的方法
      ...... 12 }

在上述源码中,第2行在调用asList方法会返回一个新的ArrayList对象,这个对象类型就是第8行的代码,Arrays类中的内部类ArrayList

2.这个内部类ArrayList继承了AbstractList这个类,并实现了如下图所示方法

 可以发现并没有实现add方法。

3.因此在调用add方法时,根据继承规则子类没有找到add方法,便会去父类寻找,即在AbstractList这个类中找到add方法,如下图所示

再追踪add(size(), e)

 

 发现其直接抛出UnsupportedOperationException异常。

标签:Arrays,ArrayList,add,集合,方法,asList
From: https://www.cnblogs.com/miku-39/p/17779606.html

相关文章

  • 无涯教程-Arduino - Multi-Dimensional Arrays函数
    具有二维的数组(即下标)通常表示由以行和列排列的信息组成的值表。intb[2][2]={{1,2},{3,4}};这些值按大括号按行分组,因此,1和2分别初始化b[0][0]和b[0][1],而3和4分别初始化b[1][0]和b[1][1],如果给定行的初始化程序不足,则将该行的其余元素初始化为0。因此......
  • mongo数据库$out输出覆盖原集合
    数据库版本:4.2.8操作系统:ubuntu20mongoaggregate中$out输出可以将原集合覆盖。问题复现:1、写入测试数据rs0:PRIMARY>useceshirs0:PRIMARY>db.t1.insert({id:1})rs0:PRIMARY>db.t1.insert({id:2})rs0:PRIMARY>db.t1.insert({id:3})rs0:PRIMARY>db.t1.insert({id:......
  • python基础-数据类型(none、集合、字典、浮点数)
    目录1.了解hash2.None类型3.集合(set)3.1定义3.2独有功能3.3公共功能3.4转换3.5其他3.5.1集合的存储原理3.5.2元素必须可哈希3.5.3集合查找元素速度快3.5.4对比和嵌套集合练习题4.字典(dict)4.1定义4.2独有功能练习题4.3公共功能4.4转换4.5其他4.5.1存储原......
  • 集合类型内置方法
    集合类型内置方法集合基本用不到,redis1.作用就是存储一大堆元素的东西,容器数据类型2.定义方式以{}用逗号隔开不可变数据类型s={1,23,3,4,5,6,4,32,4,'12','e','sdf'}print(s)#打印是乱序的去重lis=[1,2,2,3,4,3]print(set(lis))print(list(set(lis)))......
  • java集合框架及其特点
    常见的集合以及他们的特点有哪些呢java集合类主要由Collection和Map两个根接口派生出来的。Collection派生了List,Set,Queue这三个子接口。1、List代表有序可重复集合,可直接根据元素的索引来访问。ArrayList:排列有序,可重复底层使用数组速度快,增删慢线程不安全容量不够......
  • Arrays.asList() 和 Collections.singletonList()
    Collections.singletonList()  创建不可变List,只包含单个元素,List容量始终为1;  Arrays.asList()  快速创建List,但创建的列表是不可变的,不可调用add方法;......
  • Atcoder Beginner Contest 324 G Generate Arrays 题解-Treap
    为了更好的阅读体验,请点击这里题目链接套上平衡树板子就能做的很快的题,然后因为是指针存树,因此交换只需要把序列大小较小的挨个拿出来插到相应的地方即可。复杂度\(O(N\log^2N)\)。但是一定要记住不可以直接使用std::swap交换包含带有指针的类的实例(如代码中的Treap类)!......
  • 第 367 场周赛(双指针,集合(upper_bound&lower_bound),前后缀分解)
    2903.找出满足差值条件的下标I2905.找出满足差值条件的下标II这两个题只有数据范围上面的差距 这个题我们大体思路是维护双指针,枚举数字,维护集合。这是灵神视频的代码classSolution:deffindIndices(self,nums:List[int],indexDifference:int,valueDiffere......
  • turtle海龟绘图指令集合
    turtle.forward(distance)向当前画笔方向移动distance像素长度turtle.backward(distance)向当前画笔相反方向移动distance像素长度turtle.right(degree)顶时针移动degree°角度turtle.left(degree)逆时针移动degree°角度turtle.penup(......
  • Codeforces Round 892 (Div. 2) B. Olya and Game with Arrays
    一系列\(n\)个数组,第\(i\)个数组的大小\(m_i\geq2\)。第\(i\)个数组为\(a_{m_1},a_{m_2},\cdots,a_{m_i}\)。对于每个数组,你可以移动最多一个元素到另一个数组。一系列\(n\)个数组的\(beauty\)定义为\(\sum_{i=1}^{n}min_{j=1}^{m_i}a_{i,j}\)。询问你......