谁再用Arrays.asList就开除谁

2024-02-14 02:44
文章标签 arrays aslist 开除

本文主要是介绍谁再用Arrays.asList就开除谁,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

谁再用Arrays.asList就开除谁

hi,我是achang,今天说一个使用Arrays.asList后对应出现的一系列坑,因为他有那么多坑,所以会有开玩笑的说:谁再用Arrays.asList就开除谁

Arrays.asList的作用很简单,就是把传入多参 或者 数组 直接转化为 List,如下代码:

List<String> list = Arrays.asList("1", "2", "3");

一、List转化坑

通过这样子的调用,就可以获得一个装有"1","2","3"List

在这里插入图片描述
如果如上图写编写使用的话,最终会获得一个长度为1的List集合,而并非为长度为3的List集合。

这个问题的出现是,当我们使用一个基本类型的数组作为入参的时,他不会把基本数组中的每个元素作为List转化,而是把基本类型数组作为整体转化为List中的1个元素

那如果想要解决上面的问题,就想要把基本类型数组改为包装类Integer就可以解决。

在这里插入图片描述

二、UnsupportedOperationException坑

当用Arrays.asList创建出来的List对象,使用如add()等方法时,就会抛出UnsupportedOperationException异常
在这里插入图片描述
如上报错的原因是,调用Arrays.asList时创建的List对象时Arrays类的内部类对象,而这个内部类的List,是继承的AbstractList类,他并没重写add()方法。

在这里插入图片描述
AbstractList类中的add方法默认就是抛出UnsupportedOperationException异常

在这里插入图片描述

三、引用问题

Arrays.asList生成的List后,当修改原来数组的值,会发现用Arrays.asList生产的List也会修改值。

在这里插入图片描述

针对二、三这样子的坑解决方案:

如果要对创建的List进行增删操作的话,建议直接new ArraysList,如下图所示:

  • 针对原来基本数组的元素修改时,发现并不会影响
    在这里插入图片描述

  • 对生成的List对象进行调用add()方法,发现不会抛出UnsupportedOperationException异常
    在这里插入图片描述


四、总结

针对Arrays.asList对应的坑,所以不推荐使用Arrays.asList,来直接从根源上避免出现坑。
不然就想要注意在使用中的场景是否符合你的要求,如不对Arrays.asList创建的List进行增删改的操作。

建议统一的使用一个数组转ArrayList的工具类,要么自己实现,要呢推荐已有的工具类,如:com.google.common.collect等等

这篇关于谁再用Arrays.asList就开除谁的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/707310

相关文章

JavaScript - First step - Arrays

创建数组 任何类型的对象,都可以放入数组中。 var shopping = ['bread', 'milk', 'cheese', 'hummus', 'noodles'];shopping;// (5) ["bread", "milk", "cheese", "hummus", "noodles"]var sequence = [1, 1, 2, 3, 5, 8, 13];var ra

LeetCode --- Median of Two Sorted Arrays

第一次在csdn上写备忘录,以前一直是在笔记本上写,主要是笔记本上可以随意写,只要自己能看懂,在网页上多少都受些限制,另外一方面也是想锻炼下写作能力,为以后的论文做基础吧!最近偶尔上leetcode练些题目,所以也就以这个为主题写一篇试试看,因为能力不足,理解或言辞上会有错误,还望访者不吝赐教,我定当万分感激。 好了,废话也说完了,现在进入正题: 题目: There are two sor

Leetcode207: Median of Two Sorted Arrays

There are two sorted arrays nums1 and nums2 of size m and n respectively. Find the median of the two sorted arrays. The overall run time complexity should be O(log (m+n)). 该方法的核心是将原问题转变成一个寻找第k小数的问

JAVA 一篇文章让你学会Arrays方法

一、常用方法 Arrays里面包含了一系列静态方法,用于管理或操作数组(比如排序和搜索) 1)toString 返回数组的字符串形式 Arrays.toString(arr) 2)sort 排序(自然排序和定制排序) Integer arrl= {1,-1,7,0,89}; 3)binarySearch 通过二分搜索法进行查找,要求必须排好序 int index = Arrays.b

C.Interface.And.Implementations—dynamic arrays的实现

1、An  array  is a homogeneous sequence of values in which the elements in the sequence are associated one-to-one with indices in a contiguous range.  2、Arrays in some form appear as built-in data typ

第四题:求两个有序数组的中位数(Median of Two Sorted Arrays)

题目描述: 给定两个大小为 m 和 n 的有序数组 nums1 和 nums2,请你找出这两个有序数组的中位数。 示例: 输入:nums1 = [1, 3], nums2 = [2] 输出:2.0 输入:nums1 = [1, 2], nums2 = [3, 4] 输出:2.5 要求: 你必须在对数时间复杂度 O(log(min(m, n))) 内解决这个问题。 解题思路 二分

(LeetCode)Intersection of Two Arrays II --- 求交集,不去重

Given two arrays, write a function to compute their intersection. Example: Given nums1 = [1, 2, 2, 1], nums2 = [2, 2], return

(LeetCode)Intersection of Two Arrays --- 求交集

Given two arrays, write a function to compute their intersection. Example: Given nums1 = [1, 2, 2, 1], nums2 = [2, 2], return

Java数组05:Arrays类

本节内容视频链接:Java数组07:Arrays类讲解_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV12J41137hu?p=57&vd_source=b5775c3a4ea16a5306db9c7c1c1486b5        Java中的‌Array类是一个针对数组进行操作的工具类,‌提供了排序、‌查找等功能‌。‌以下是一些常用的Ar

java Arrays.fill方法介绍

Arrays.fill 是 Java 标准库中的一个方法,用于将数组中的所有元素设置为指定的值。它可以用于一维数组以及多维数组的填充。这个方法非常有用,当你需要快速初始化或重置数组时。 方法签名 // 用于填充一维数组public static void fill(int[] a, int val);// 用于填充指定范围内的一维数组public static void fill(int[