关于日常开发和面试——集合List及数组避坑之一二

1、集合与循环的碰撞

关于在循环中对集合进行新增或删除元素操作的问题。这是一个常见的陷阱,因为这样做可能导致迭代器失效或者遍历到不应该访问的元素。

以下是一个简单的示例代码,展示了为什么不能在循环中对集合进行新增或删除元素操作:

import java.util.ArrayList;
import java.util.List;public class CollectionModificationExample {public static void main(String[] args) {List<String> list = new ArrayList<>();list.add("A");list.add("B");list.add("C");for (String s : list) {// 在循环中对集合进行修改操作list.remove(s);System.out.println(s);}}
}

在这个例子中,我们在循环中尝试从list中移除每个元素。然而,由于List.remove()方法改变了集合的大小,这会导致迭代器失效,从而无法正确遍历所有元素。

正确的做法是在循环外部对集合进行修改操作,或者使用Iterator来遍历集合。例如:

import java.util.ArrayList;
import java.util.List;public class CollectionModificationExample {public static void main(String[] args) {List<String> list = new ArrayList<>();list.add("A");list.add("B");list.add("C");// 使用 Iterator 遍历集合并进行修改操作for (Iterator<String> iterator = list.iterator(); iterator.hasNext(); ) {String s = iterator.next();iterator.remove();System.out.println(s);}}
}

在这个例子中,我们使用Iterator来遍历集合,并在循环内部进行修改操作。这样可以确保迭代器始终指向下一个元素,而不会因为集合大小的变化而失效。

总结来说,不能在循环中对集合进行新增或删除元素操作,因为这可能导致迭代器失效或者遍历到不应该访问的元素。正确的做法是在循环外部对集合进行修改操作,或者使用Iterator来遍历集合。

2、数组转集合不要翻车

在Java编程中,数组和集合都是常见的数据结构。数组是一种线性数据结构,它的大小在创建时就确定了,且不能动态地改变。而集合则是一种动态数据结构,可以动态地添加或删除元素。

在某些情况下,我们需要将一个数组转换为集合。例如,当我们需要对数组进行排序、查找、过滤等操作时,使用集合会更加方便。此外,如果数组的大小可能会发生变化,那么使用集合也是更好的选择。

在Java中,有两种主要的集合类型:List和Set。List允许重复元素,而Set则不允许重复元素。在这篇文章中,我们将重点介绍如何将数组转换为List。

首先,让我们来看一个简单的例子,展示如何将一个Integer类型的数组转换为List:

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;public class ArrayToListExample {public static void main(String[] args) {Integer[] array = {1, 2, 3, 4, 5};List<Integer> list = Arrays.asList(array);list.add(6);System.out.println(list);}
}

在这个例子中,我们首先定义了一个Integer类型的数组array,然后使用Arrays.asList(array)方法将其转换为List。

然而,需要注意的是,Arrays.asList(array)返回的是一个固定大小的列表(List),这个列表是基于给定数组的视图,而不是一个真正的列表(List)。这意味着,当你尝试向这个列表(List)添加元素时,就会抛出UnsupportedOperationException异常,因为这个列表(List)不允许添加元素。

为了避免这种错误,我们应该使用ArrayList<Integer>或者其他可变列表(List)来存储Integer类型的数组内容。这样就可以在运行时动态地添加或删除元素了。

下面是修改后的代码示例:

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;public class Main {public static void main(String[] args) {Integer[] array = {1, 2, 3, 4, 5};List<Integer> list = new ArrayList<>(Arrays.asList(array));list.add(6);System.out.println(list);}
}

在这个例子中,我们首先创建了一个ArrayList<Integer>对象,并将其初始化为Arrays.asList(array)的结果。这样,我们就可以在运行时动态地添加元素了。

总结来说,将一个数组转换为集合,尤其是将一个Integer类型的数组转换为List,需要注意以下几点:

  1. 使用ArrayList<Integer>或者其他可变列表(List)来存储数组内容。
  2. Arrays.asList(array)返回的是一个固定大小的列表(List),这个列表不允许添加元素。
  3. 如果需要动态地添加或删除元素,应该直接操作列表(List)本身。

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

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

相关文章

【详细】CNN中的卷积计算是什么-实例讲解

本文来自《老饼讲解-BP神经网络》https://www.bbbdata.com/ 目录 一、 CNN的基础卷积计算1.1.一个例子了解CNN的卷积计算是什么1.2.卷积层的生物意义 二、卷积的拓展&#xff1a;多输入通道与多输出通道2.1.多输入通道卷积2.2.多输出通道卷积 三、卷积的实现3.1.pytorch实现卷积…

Redis 缓存预热、缓存雪崩、缓存击穿、缓存穿透业务实践

0、前言 本文所有代码可见 > 【gitee code demo】 本文会涉及 缓存预热、缓存雪崩、缓存击穿、缓存穿透介绍和解决方案业务实践 1、缓存预热 1.1、描述 提前将热点数据加载到缓存&#xff0c;提前响应&#xff0c;降低后端数据源访问压力 1.2、实践 Autowiredprivate R…

3、微服务设计为什么要选择DDD

微服务设计为什么要选择DDD 1 软件架构的演进史 在深入探讨为什么在微服务设计中选择领域驱动设计&#xff08;DDD&#xff09;之前&#xff0c;我们先来了解一下软件架构的发展和演变历史。软件架构的演进通常与设备和技术的发展密切相关&#xff0c;随着设备和技术的不断进…

搭建Renesas R7FA8D1BHECBD-BTB的开发调试环境(DAP-LINK: N32G45XVL-STB)

目录 概述 1 软硬件 1.1 软硬件环境信息 1.2 开发板信息 1.3 调试器信息 2 FSP和KEIL产生测试项目 2.1 FSP生成项目 2.2 Keil中配置 3 硬件连接框图 4 一个测试案例 4.1 功能介绍 4.2 定时器函数 5 测试 搭建Renesas R7FA8D1BHECBD-BTB的开发调试环境&#xff08…

MySQL【触发器、存储过程、函数、范式】

day53 MySQL 触发器 创建触发器&#xff1a;&#xff08;before &#xff1a; 前置触发器、after &#xff1a;后置触发器&#xff09; 语法&#xff1a; delimiter xx 指定分隔符xxcreate trigger 触发器名 [before | after] 触发事件 on 表名 for each row 执行语句begin…

java LinkedList 怎么保证线程安全

在 Java 中&#xff0c;LinkedList 本身并不是线程安全的。如果需要在多线程环境中使用 LinkedList&#xff0c;可以采取以下几种方法来保证线程安全性&#xff1a; 1. 使用 Collections.synchronizedList Java 提供了一个实用的方法 Collections.synchronizedList 来包装 Li…

重磅!UOSDN焕新,开启创新之旅!

亲爱的开发者们 经过精心打磨和优化 全新改版的UOSDN&#xff08;统信开发者支持网络&#xff09; 已经正式上线啦&#xff01; 我们致力于为您打造一个更加便捷、高效、富有创意和互动性的开发平台&#xff0c;详情&#x1f449;https://uosdn.uniontech.com/ 以UOSDN作为载…

数字信号处理实验四(FIR数字滤波器设计)

FIR数字滤波器设计&#xff08;2学时&#xff09; 要求&#xff1a; 设计一个最小阶次的低通FIR数字滤波器&#xff0c;性能指标为&#xff1a;通带0Hz~1500Hz&#xff0c;阻带截止频率2000Hz&#xff0c;通带波动不大于1%&#xff0c;阻带波动不大于1%&#xff0c;采样频率为8…

【Chrome开发者工具概览】

Chrome开发者工具概览 一、开启 Chrome 开发者工具1. 如何打开开发者工具2. 主要组成部分 二、Elements 栏的使用1. 修改页面元素2. 调整 CSS 样式3. 搜索功能 三、Console 栏的探索1. 执行 JavaScript2. 调试技巧3. 监听事件和修改元素 四、利用 Sources 栏调试代码1. 查看源代…

常见的反爬手段和解决思路(爬虫与反爬虫)

常见的反爬手段和解决思路&#xff08;爬虫与反爬虫&#xff09; 学习目标1 服务器反爬的原因2 服务器长反什么样的爬虫&#xff08;1&#xff09;十分低级的应届毕业生&#xff08;2&#xff09;十分低级的创业小公司&#xff08;3&#xff09;不小心写错了没人去停止的失控小…

阿里云docker镜像仓库

一、阿里云控制台搜&#xff1a;容器镜像服务 二、选个人版,企业版收费 设置命名空间 andy 设置仓库名 例如 llama 三、使用 1、登录 docker login --username*** registry.cn-hangzhou.aliyuncs.com 2、本地镜像打个tag docker tag [ImageId] registry.cn-hangzhou.al…

安装Docker运行TensorFlow容器-《MCU嵌入式AI开发笔记》(第9集)搜索柔贝特三哥视频同步更新

安装Docker运行 TensorFlow 容器-《MCU嵌入式AI开发笔记》&#xff08;第9集&#xff09;。目标&#xff1a;在国产MCU上运行AI深度学习算法&#xff0c;实现识别、判断等功能。搜索柔贝特三哥&#xff0c;《MCU嵌入式AI开发笔记》视频同步更新。 安装Docker运行 TensorFlow 容…

[推荐]有安全一点的网贷大数据信用查询网站吗?

在互联网金融日益发展的今天&#xff0c;网贷大数据查询网站成为了许多人申贷前的必备工具。随着使用这些网站的人群越来越多&#xff0c;安全问题也逐渐浮出水面。最近&#xff0c;就有许多用户反馈自己的个人信息在网贷大数据查询网站上被泄露。为了解决这一问题&#xff0c;…

对冲基金。。。

对冲基金是一种投资基金&#xff0c;它们通常采用多种策略来实现盈利&#xff0c;同时尽可能地减少风险。这些策略可能包括使用衍生品、杠杆和多种金融工具来进行投资。对冲基金的目标是提供绝对回报&#xff0c;即无论市场条件如何&#xff0c;都力求实现正收益。以下是一些关…

reactjs18 中使用路由技巧

react18 版本中&#xff0c;路由的用法发生了变化&#xff0c;react18 版本中&#xff0c;路由由 react-router-dom 包提供。与 react-router 包不同的是&#xff0c;react-router-dom 包提供了 createBrowserRouter 方法&#xff0c;该方法可以创建路由对象。总之&#xff0c;…

原码、反码、补码、移码的计算转换

文章目录 正数负数原码 & 反码反码 -> 补码原码 <-> 补码移码 <- Other 方法总结练习 正数 原码 和 反码 和 补码 都是一样的不会发生变化 因此&#xff0c;计算的时候先看第一位 符号位 &#xff0c;只要能发现是正数&#xff0c;三者都不变 移码 在补码基础…

《每天5分钟用Flask搭建一个管理系统》第5章:表单处理

第5章&#xff1a;表单处理 5.1 Web表单的基本概念 Web表单是收集用户输入的一种方式。在Flask中&#xff0c;表单通常与HTML表单结合使用&#xff0c;并通过POST方法提交。 示例代码&#xff1a;HTML表单 <!-- templates/login.html --> <form method"post&…

深入理解JVM的即时编译器(JIT)

在Java的世界里&#xff0c;即时编译器&#xff08;Just-In-Time Compiler&#xff0c;简称JIT&#xff09;是一个至关重要的组件&#xff0c;它负责将Java字节码转换成本地机器码&#xff0c;以提高程序的执行效率。本文将深入探讨JIT编译器的工作原理&#xff0c;并通过代码示…

飞凌嵌入式技术创新日(北京站)圆满落幕,共创嵌入式技术的美好未来

2024年6月25日下午&#xff0c;飞凌嵌入式技术创新日&#xff08;北京站&#xff09;在北京中关村皇冠假日酒店盛大举行。此次活动汇聚了近300位嵌入式技术领域的专家和企业代表&#xff0c;共享嵌入式技术的盛宴&#xff0c;共创嵌入式技术的美好未来&#xff01; 进入活动现场…

美国抗攻击服务器有哪些可靠的解决方案

美国抗攻击服务器在面对日益严重的网络安全威胁时&#xff0c;需要采取一系列可靠的解决方案来确保服务器的稳定运行和数据安全。以下是一些科普性质的抗攻击服务器解决方案&#xff1a; 一、流量清洗与过滤 流量清洗是美国抗攻击服务器应对DDoS攻击的重要措施。当检测到异常流…