Java开发规范01 - 集合篇_Arrays.asList 坑

简介: Java开发规范01 - 集合篇_Arrays.asList 坑

20210322233817564.png

Arrays.asList 规则

我们先看下阿里巴巴编程规范中的一条规则:


20210322233721187.png


Code

add - java.lang.UnsupportedOperationException

    /**
     * Arrays.asList的注意事项
     */
   public static void  arraysAsList(){
       List<Integer> list = Arrays.asList(1, 2,3,4,5);
       System.out.println(list.contains(2));
       System.out.println(list.contains(6));
       //使用工具类 Arrays.asList()把数组转换成集合时,不能使用其修改集合相关的方法,
       // 它的 add/remove/clear 方法会抛出 UnsupportedOperationException 异常
       list.add(8);
       System.out.println(list.contains(8));
   }


20210322234224244.png

额 调用 add方法向集合中添加数据,居然抛出了 java.lang.UnsupportedOperationException 异常


源码分析


20210322234646755.png


返回一个 new ArrayList<>(a)

点击去,然后发现居然不是我们常用的 java.util.ArrayList

20210322235005167.png

20210322235048332.png

发现端倪了么?

它也继承了AbstractList类,

20210322235232959.png

20210322235208388.png



重写了抽象父类AbstractList的很多方法,比如刚刚使用的contains方法,但是却没有重写add方法


20210322235607134.png


所以在调用add方法时才会抛出java.lang.UnsupportedOperationException异常。


同样的 remove 、 clear亦然

remove - java.lang.UnsupportedOperationException

20210322235930234.png

clear - java.lang.UnsupportedOperationException

20210323000235449.png

相关文章
|
17天前
|
安全 Java 大数据
|
15天前
|
安全 Java 开发者
【JAVA】哪些集合类是线程安全的
【JAVA】哪些集合类是线程安全的
|
15天前
|
Java
【JAVA】怎么确保一个集合不能被修改
【JAVA】怎么确保一个集合不能被修改
|
1天前
|
存储 安全 Java
Java一分钟之-集合框架进阶:Set接口与HashSet
【5月更文挑战第10天】本文介绍了Java集合框架中的`Set`接口和`HashSet`类。`Set`接口继承自`Collection`,特征是不允许重复元素,顺序不确定。`HashSet`是`Set`的实现,基于哈希表,提供快速添加、删除和查找操作,但无序且非线程安全。文章讨论了`HashSet`的特性、常见问题(如元素比较规则、非唯一性和线程安全性)以及如何避免这些问题,并提供了代码示例展示基本操作和自定义对象的使用。理解这些概念和注意事项能提升代码效率和可维护性。
9 0
|
1天前
|
存储 安全 算法
Java一分钟之-Java集合框架入门:List接口与ArrayList
【5月更文挑战第10天】本文介绍了Java集合框架中的`List`接口和`ArrayList`实现类。`List`是有序集合,支持元素重复并能按索引访问。核心方法包括添加、删除、获取和设置元素。`ArrayList`基于动态数组,提供高效随机访问和自动扩容,但非线程安全。文章讨论了三个常见问题:索引越界、遍历时修改集合和并发修改,并给出避免策略。通过示例代码展示了基本操作和安全遍历删除。理解并正确使用`List`和`ArrayList`能提升程序效率和稳定性。
7 0
|
3天前
|
存储 安全 算法
掌握Java并发编程:Lock、Condition与并发集合
掌握Java并发编程:Lock、Condition与并发集合
11 0
|
3天前
|
存储 安全 Java
深入理解Java集合框架
深入理解Java集合框架
9 0
|
9天前
|
存储 安全 Java
Java集合的分类有哪些?
Java中的集合就像一个容器,专门用来存储Java对象,这些对象可以是任意的数据类型,并且长度可变。这些集合类都位于java.util包中,在使用时一定要注意导包的问题,否则会出现异常。
35 10
|
12天前
|
安全 Java
循环的时候去删除集合中的元素 java.util.ConcurrentModificationException
循环的时候去删除集合中的元素 java.util.ConcurrentModificationException
|
13天前
|
Java
【专栏】Java 8 的 Streams 提供了一种处理数据集合的新方式,增强了代码的可读性和可维护性
【4月更文挑战第28天】Java 8 的 Streams 提供了一种处理数据集合的新方式,增强了代码的可读性和可维护性。本文介绍了 Streams 的基本概念,如从数据源创建 Stream,以及中间和终端操作。通过过滤、映射、归并、排序、分组等案例,展示了 Streams 的使用,包括并行 Streams 提高效率。学习 Streams 可以提升代码质量和效率,文章鼓励读者在实际开发中探索更多 Streams 功能。