List那些坑

news2025/2/9 4:10:35

        很多文章都介绍过这些坑,本文做个记录,并提供解决方案。

1.Arrays.asList的坑

 1.1现象

        情况1:通过Arrays.asList方法生成的List数据不支持添加操作

        使用Arrays.asList方法生成的List数据,不能对其进行删除或者添加操作。代码示例如下:

    public static void main(String[] args) {
        List<String> newList = Arrays.asList("1", "2");
        newList.add("3");
    }

        报错信息如下:

Exception in thread "main" java.lang.UnsupportedOperationException
	at java.util.AbstractList.add(AbstractList.java:148)
	at java.util.AbstractList.add(AbstractList.java:108)
	at com.yangsh.meal.utils.ListUtils.main(ListUtils.java:15)

结论1:通过Arrays.asList方法生成的List数据不支持添加操作

        情况2:通过Arrays.asList方法生成的List数据受原数组影响

    public static void main(String[] args) {
        String[] arrays = new String[]{"1","2","3"};
        List<String> newList = Arrays.asList(arrays);
        System.out.println(newList);
        arrays[2] = "4";
        System.out.println(newList);
    }

        打印内容如下:

[1, 2, 3]
[1, 2, 4]

结论2:通过Arrays.asList方法生成的List数据受原数组影响,原数组改变后,新生成的List数据也会有同样的改变

1.2 解决方案

本文提供一个数组生成List的方法,方法如下:

package com.yangsh.meal.utils;

import java.util.ArrayList;
import java.util.List;

/**
 * @author jzhou
 * @DESC 数组工具类
 * @date 2023/12/24 17:39
 */
public class ArraysUtils {

    public static <T> List<T> asList(T[] a) {
        List newList = new ArrayList<>(a.length);
        for (int i = 0; i < a.length; i++) {
            newList.add(a[i]);
        }
        return newList;
    }
}

测试代码

    public static void main(String[] args) {
        String[] arrays = new String[]{"1","2","3"};
        List<String> newList = ArraysUtils.asList(arrays);
        System.out.println(newList);
        arrays[2] = "4";
        System.out.println("原数组修改,不影响新生成的List数据");
        System.out.println(newList);
        newList.add("5");
        System.out.println("新数组支持add操作");
        System.out.println(newList);
    }

打印信息如下:

[1, 2, 3]
原数组修改,不影响新生成的List数据
[1, 2, 3]
新数组支持add操作
[1, 2, 3, 5]

至此,问题得以解决。当然还有其它的方式,比如使用stream方式。

2. list.subList的坑

2.1现象

        先看代码和打印信息,代码如下:

    @Test
    public static void testSubList(){
        List<String> list = new ArrayList<>(5);
        list.add("1");
        list.add("2");
        list.add("3");
        List<String> subList = list.subList(1, 2);
        list.add("4");
        for (int i = 0; i < subList.size(); i++) {
            System.out.println(subList.get(i));
        }
    }

        打印信息:

Exception in thread "main" java.util.ConcurrentModificationException
	at java.util.ArrayList$SubList.checkForComodification(ArrayList.java:1239)
	at java.util.ArrayList$SubList.size(ArrayList.java:1048)

结论:list使用subList方法,如果再操作list后,不能遍历subList生成的数据,否则报错。

2.2解决方案

        可以再写一个静态方法,代码如下:

    public static List newSubList(List list,int fromIndex,int toIndex){
        ArrayList<Object> subList = new ArrayList<>();
        for (int i = 0; i < list.size(); i++) {
            if(i >= toIndex){ return subList; }
            if(i >= fromIndex){
                subList.add(list.get(i));
            }
        }
        return subList;
    }

        测试一下,打印信息如下:

至此问题解决。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1335905.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【机器学习】Boosting算法-梯度提升算法(Gradient Boosting)

一、原理 梯度提升算法是一种集成学习方法&#xff0c;它可以将多个弱分类器或回归器组合成一个强分类器或回归器&#xff0c;提高预测性能。梯度提升算法的核心思想是利用损失函数的负梯度作为残差的近似值&#xff0c;然后用一个基学习器拟合这个残差&#xff0c;再将其加到之…

【NI-RIO入门】计算和测量cRIO系统的功耗

计算 您可以根据cRIO机箱的最大功耗、机箱和模块的平均功耗&#xff0c;最后通过经验测试cRIO和模块的功耗来计算散热量。每一种散热计算的精确度都逐渐上升&#xff0c;但安全系数也逐渐下降。 注意&#xff1a;请记住&#xff0c;热量输出以英国热量单位 (BTU…

如何学习VBA_3.2.10:人机对话的实现

我给VBA的定义&#xff1a;VBA是个人小型自动化处理的有效工具。利用好了&#xff0c;可以大大提高自己的劳动效率&#xff0c;而且可以提高数据处理的准确度。我推出的VBA系列教程共九套和一部VBA汉英手册&#xff0c;现在已经全部完成&#xff0c;希望大家利用、学习。 如果…

【LeetCode刷题笔记】动态规划(四)

背包问题 0-1 背包问题 有一个背包,它的容量为 C现在有 n 种不同的物品,他们的编号分别是 0...n-1。每一种物品只有一个。在这 n 种物品中,第 i 个物品的重量是 w[i],它的价值为 v[i]问题是:可以向这个背包中放哪些物品,使得在不超过背包容量的基础上,背包中物品的总价…

Python 数据分析 Matplotlib篇 增加注释【plt.text() plt.annotate()】(第3讲)

Python 数据分析 Matplotlib篇 增加注释【plt.text() & plt.annotate()】(第3讲)         🍹博主 侯小啾 感谢您的支持与信赖。☀️ 🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔…

FPGA-ZYNQ-7000 SoC在嵌入式系统中的优势

FPGA-ZYNQ-7000 SoC在嵌入式系统中的优势 本章节主要参考书籍《Xilinx Zynq-7000 嵌入式系统设计与实现 基于ARM Cortex-A9双核处理器和Vivado的设计方法 (何宾&#xff0c;张艳辉编著&#xff09;》 本章节主要讲述FPGA-ZYNQ-7000 SoC在嵌入式系统中的优势&#xff0c;学习笔…

String 的特点是什么?它有哪些重要的方法?

几乎所有的 Java 面试都是以 String 开始的&#xff0c;如果第一个问题没有回答好&#xff0c;则会给面试官留下非常不好的第一印象&#xff0c;而糟糕的第一印象则会直接影响到自己的面试结果&#xff0c;就好像刚破壳的小鹅一样&#xff0c;会把第一眼看到的动物当成自己的母…

移动开发新的风口?Harmony4.0鸿蒙应用开发基础+实践案例

前段时间鸿蒙4.0引发了很多讨论&#xff0c;不少业内人士认为&#xff0c;鸿蒙将与iOS、安卓鼎足而三了。 事实上&#xff0c;从如今手机操作系统竞赛中不难看出&#xff0c;安卓与iOS的形态、功能逐渐趋同化&#xff0c;两大系统互相取长补短&#xff0c;综合性能等差距越来越…

【PySpark】Python 中进行大规模数据处理和分析

一、前言介绍 二、基础准备 三、数据输入 四、数据计算 五、数据输出 六、分布式集群运行 一、前言介绍 Spark概述 Apache Spark 是一个开源的大数据处理框架&#xff0c;提供了高效、通用、分布式的大规模数据处理能力。Spark 的主要特点包括&#xff1a; 速度快&#xff1…

【教程】从gitee或者github,下载单个文件或文件夹命令

1.打开git 2.初始化 git init 3.设置允许下载子目录 &#xff08;不需要修改任何&#xff0c;只要原样复制&#xff0c;需要按照个人状况修改的话我会标注&#xff09; git config core.sparseCheckout true 4. 选择要下载的单个文件夹的路径 这里单引号内部需要修改&…

C语言学习day10:while语句

while语句属于循环结构&#xff1b; while语句运行图&#xff1a; while语句表达式&#xff1a; while (表达式) {} 代码&#xff1a; int main() {//while (表达式) {//}int i 0;//死循环while (i < 10){printf("%d\n",i);i;}system("pause");ret…

[Python进阶] 操作注册表:winreg

5.22 操作注册表&#xff1a;winreg 5.22.1 注册表概念 在Windows系统中&#xff0c;注册表本质上就是一个数据库&#xff0c;其中存放着硬件、软件、用户、操作系统以及程序相关设置信息。我们除了使用Windows系统自带的regedit程序&#xff0c;也可以通过Python编程读取并操…

3分钟了解安全数据交换系统有什么用!

企业为了保护核心数据安全&#xff0c;都会采取一些措施&#xff0c;比如做网络隔离划分&#xff0c;分成了不同的安全级别网络&#xff0c;或者安全域&#xff0c;接下来就是需要建设跨网络、跨安全域的安全数据交换系统&#xff0c;将安全保障与数据交换功能有机整合在一起&a…

RK3588平台开发系列讲解(AI 篇)RKNN-Toolkit2 模型的加载转换

文章目录 一、Caffe 模型加载接口二、TensorFlow 模型加载接口三、TensorFlowLite 模型加载接口四、ONNX 模型加载五、DarkNet 模型加载接口六、PyTorch 模型加载接口沉淀、分享、成长,让自己和他人都能有所收获!😄 📢 RKNN-Toolkit2 目前支持 Caffe、TensorFlow、Tensor…

Navicat误删除生产环境SQLServer2012单表数据后恢复单表数据

背景&#xff1a; 1-后端更新功能部署到客户生产环境时误将测试环境数据保留&#xff0c;项目负责人发现后告知后端。 2-后端登录客户生产数据库使用navicat删除一张表的单表数据时多删了几条数据&#xff0c;判断弄乱了客户生产环境下自己产生的单表数据。 思路&#xff…

DML语言(重点)———update

格式&#xff1a;update 要修改的对象 set 原来的值新值 -- 修改学员名字,带了简介 代码案例&#xff1a; -- 修改学员名字,带了简介 UPDATE student SET name清宸 WHERE id 1; -- 不指定条件情况下&#xff0c;会改动所有表&#xff01; 代码案例…

【MySQL】数据库之存储引擎

目录 一、什么是存储引擎 MySQL 整个查询执行过程&#xff0c;即MySQL的工作原理&#xff1f; 二、MyISAM 与 InnoDB 的区别&#xff1f; 三、如何查看当前表的存储引擎&#xff1f; 1.查看当前的存储引擎 2.查看数据库支持哪些存储引擎 四、如何设置存储引擎&#xff1f;…

CentOS系统环境搭建(二十六)——使用nginx在无域名情况下使用免费证书设置https

centos系统环境搭建专栏&#x1f517;点击跳转 文章目录 使用nginx在无域名情况下使用免费证书设置https1.获取SSL证书1.1 生成SSL密钥1.2 生成SSL证书1.3 重命名密钥文件 2.nginx配置https2.1 放证书2.2 修改nginx.conf文件2.2.1 将80端口重定向到4432.2.2 端口443配置ssl证书…

ubuntu18设置开机自启动

项目需求&#xff1a;机器人开机上电后工控机首先运行机械臂控制代码&#xff0c;再运行算法代码 1.终端执行以下代码 gnome-session-properties 2.设置开机自启动选项 在弹出界面点击添加&#xff0c;名称随便填&#xff0c;命令填入要启动的脚本&#xff0c;注释随便填。 …

sigmoid softmax优化

1.前言 最近在搞模型部署发现&#xff0c;推理速度不能满足我们需求&#xff0c;于是最近学习了优化算子技巧&#xff0c;学到了sigmoid&#xff0c;softmax算子优化&#xff0c;真的数学之美。2.sigmoid算子优化 一.算子优化图 我们根据sigmoid公式&#xff0c;我们进行求反…