ArrayList与for循环的故事

YOLOv10注意力革新:小波域注意力(WDA)如何实现多尺度特征精准聚焦 本文深入解析YOLOv10中的小波域注意力(WDA)机制,探讨其如何通过频域分解与动态聚焦实现多尺度特征精准提取。WDA模块结合离散小波变换与注意力机制,显著提升小目标检测性能,在VisDrone数据集上AP提升达12.6%。文章详细介绍了两种集成方案及代码实现,为计算机视觉开发者提供实用指南。 阅读详情

/**版本1.8

*[0,9]的一个Arraylist,要求把其中奇数删除。

*于是便有了以下代码!

/

import java.util.ArrayList;


public class ArrayTest
{
public static void main(String[] args)
{
ArrayList list = new ArrayList();

for ( int i = 0; i < 10; i++ )
{
list.add( new Integer( i ) );
}

for ( int i = 0; i < list.size(); i++ )
{
int in = (( Integer )list.get( i )).intValue();
if ( in % 2 == 1 )
{
list.remove( i );
}
}

for ( int i = 0; i < list.size(); i++ )
{
System.out.println( list.get(i));
}

}
}

// 输出结果正确



结果分析: ArrayList  list 在执行remove()方法时,list.size()方法返回值会发生改变. 

i == 0 in == 0 if  false

 i==1 in ==1  第一次执行完remove(1)方法后,数据变成0 2 3 4 5 6 7 8 9 list.size() == 9

第二次执行 remove(2)数据变成0 2 4 5 6 7 8 9,list.size() == 8

依次类推....

当执行第5次remove(5)时,数据变成 0 2 4 6 8,list.size() == 5

for判断语句 i == 6 > list.size() == 5;

循环结束。打印结果。。。

因此我觉得这种方法是不科学的,也不安全,因此我采用Iterator迭代器去删除

//下面的代码替代for循环部分

Iterator iter = list.iterator();
while ( iter.hasNext() )
{
Integer in = (Integer)iter.next();
if ( in.intValue() % 2 == 1 )
{
list.remove( in );
}
}

然后问题又来了,抛出异常,


通过查看源代码我们发现

调用list.remove()方法导致modCount和expectedModCount的值不一致。

解决办法:

其实很简单,细心的朋友可能发现在Itr类中也给出了一个remove()方法:

在这个方法中,删除元素实际上调用的就是list.remove()方法,但是它多了一个操作:

expectedModCount = modCount;

因此,在迭代器中如果要删除元素的话,需要调用Itr类的remove方法。

  将上述代码改为下面这样就不会报错了:

Iterator iter = list.iterator();
while ( iter.hasNext() )
{
Integer in = (Integer)iter.next();
if ( in.intValue() % 2 == 1 )
{
iter.remove();
}
}

参考文章:http://www.cnblogs.com/dolphin0520/p/3933551.html

电磁阀颤振工作原理 颤振 颤振,弹性结构在均匀气(或液)流中受到空气(或液体)动力、弹性力和惯性力(见达朗伯原理)的耦合作用而发生的大幅度振动,它是气动弹性力学中最重要的问题之一。 随着机电液一体化技术的发展,电液比例控制技术的应用越来越广泛。电液比例控制系统范围较广,在液压传动与控制过程中,系统能够接受模拟信号或数字信号,使输出的流量或压力连续成比例地变化,都属于此类。该控制系统的优点是充分利用了液压控制与电气控制的长处,即功率传递靠液压,信号处理靠电气的优化措施。 电液比例控制原理与要求 液压控制系统中两个最重要的被控参数 阅读详情

相关推荐

【汽车故障诊断2】从标准到实战:解码DTC格式背后的诊断逻辑

本文深入解析汽车诊断故障码(DTC)的格式与逻辑,对比了OBD-II标准(如ISO 15031-6)的5字符格式与UDS协议(ISO 14229-1)下更丰富的3字节格式。文章从国际标准出发,结合实战案例,阐述了DTC如何作为汽车电子系统的“体检报告”,帮助工程师和维修技师精准定位故障,并详细解读了UDS 19服务如何读取和管理DTC状态。

berry的博客 711

遍历List集合的三种方法

List list = new ArrayList(); list.add("aaa"); list.add("bbb"); list.add("ccc"); 方法一: 超级for循环遍历 for(String attribute : list) { System.out.println(attribute); } 方法二: 对于ArrayList来说速度比较快, 用for循环, 以size为

1500

FISCO-BCOS配置及使用控制台

如果因为网络问题长时间无法下载,请尝试:curl -#LO https://gitee.com/FISCO-BCOS/console/raw/master-2.0/tools/download_console.sh && bash download_console.sh。为了可以更加方便快捷,所以HelloWorld合约已经被内置了,位于控制台下面的contracts/solidity/HelloWorld.sol。用于获取和设置name的值,合约代码如下。部署成功会返回合约地址。

qq_51562644的博客 831

List集合循环添加对象会重复的原因及解决办法

最近在开发中,遇到个以前还没怎么遇到过的问题,可能是开发经验太少了吧,不过才个坑就最好把这个坑补上,下次才不会再掉进去。 Android开发,从数据库读取一些用户的数据,我使用的是List集合来存储一个用户对象,然后传给前台,但却是发现取到的数据居然是重复的。我当时的写法大概是下面这样的 //后台读取数据库的对象数据 List<User> list = new ArrayList<>(); User u = new User(); for (int i = 0; i <

c_o_d_e_的博客 7960

MUSIC算法翻车?Toeplitz矩阵重构如何解决DOA估计中的相干信源难题

本文深入探讨了MUSIC算法在相干信源DOA估计中失效的根本原因,并详细介绍了基于Toeplitz矩阵重构的协方差矩阵修复技术。该方法通过凸优化恢复协方差矩阵的理想结构,有效解决了信号子空间秩亏损问题,从而显著提升了MUSIC算法在相干和多径场景下的分辨精度与稳健性。

a2b3c4d5e的博客 249

多层下拉框_HLM多层线性模型|HLM2教程

01多层线性模型简介多层线性模型(Multilevel linear model),又称为多层分析、分层线性模型。其本质是线性模型的线性模型、回归的回归。本文主要介绍如何使用HLM6.08软件来构建两层线性模型。02案例简介水平1文件:样例数据HSB1.sav包括7185个案例和4个变量:MINORITY:种族(1=minority, 0=other)FEMALE:性别(1=femal...

weixin_35714534的博客 5619

关于ArrayList 通过循环添加重复异常

List list = new ArrayList(); for(int i=0;i<1000;i++){ Stu stu = new Stu(); stu.setName("XXX"); list.add(stu); } 对于这个简单的执行语句,如果把 Stu stu = new Stu(); 写在外面,每次 stu.clear(); 那么list...

海纳GIS专栏 778

鸿蒙读书笔记1:《鸿蒙操作系统设计原理与架构》

GUI、 语 音 控 制 方 式 的 VUI(Voice User Interface, 语 音 用 户 界。电话、多媒体、DFX、MSDP(Multimodal Sensor Data Platform,多。面)、手势/姿态控制的CVUI(Computer Vision User Interface,计算。KAL(Kernel Abstract Layer,内核抽象层)通过屏蔽多内核差异,JavaScript、C、C++等多语言的用户程序开发框架,以及UI框架、

jackyrongvip的专栏 2447

For循环,这里的listMap必须在for循环之前new一下(循环外面new ArrayList对象),不然每次循环加入到list中,下次循环就把上次的数据清空了,最后存到list中是最后一条数据。

PositionLog p1 = new PositionLog(); p1.setNonBalPosition(new BigDecimal(1.1)); p1.setBalPosition(new BigDecimal(1)); p1.setBankId("9901"); p1.setProductId("Cbot/CNY_11"); p1.setInstrumentId("MARG

dest_dest的专栏 4993

Node-RED教程(二):Node-RED的面板的操作

Node-RED系列(二):Node-RED的面板的操作 要使用Node-RED去搭建一个物联网平台,链接设备,设备通信,就必须要先熟悉Node-RED的这种面板,对于一个新的项目,在动手做之前一点想对这个的技术的文档有足够的了解做起来才能游刃有余。本期我给大家介绍一下Node-RED的各种面板,熟悉这些面板后,在后续的搭建Iot服务中,会举重若轻,同时该系列的文档,难度会逐步加深,知道了本章解释的名称后对后续文章的理解有很大帮助。 面板1:默认节点选项列表 安装Node-RED后默认的节点分为这5大类

知无涯 1万+

PyTorch深度学习实战(6)——神经网络性能优化技术

神经网络性能优化技术是指通过改进神经网络的结构、参数初始化、正则化和训练过程等方面来提高其性能和泛化能力的方法。优化技术的选择和调试需要根据具体问题进行,通过不断实验和调整,找到最适合网络的优化策略。本节首先训练了一个简单的全连接网络,然后在此基础上介绍了简单有效的神经网络性能提升技巧。

盼小辉丶的博客 1万+

for循环中ArrayLis嵌套用ArrayList的一些坑

在写项目时遇到从数据库取出一堆关于评论的信息,在Service层中进行数据处理,最终想以List>>>形式进行解析交互。 先看我正确的代码,之后在放出遇到的坑, package com.platebbg.product.service.impl; import java.util.ArrayList; import java.util.HashMap; import java.uti

知足happiness的博客 2414

KEPServerEX 6 之 lot Gateway MQTT Clinet 配置使用方式

IoT Gateway即Internet of Things Gateway物联网网关。 ---------------------------------------------------------------------------------- 方式:使用kepw的IOTGateway插件选择MQTTClient 解决:可以实现 KEPW 的Tag值 发送到 MQTT 服务器上 ----------------------------------------...

-雲飛兄-博客 6938

迭代器和增强型for循环

★迭代器:  Java集合框架的集合类,我们有时候称之为容器。容器的种类有很多种,比如ArrayList、LinkedList、HashSet...,每种容器都有自己的特点,ArrayList底层维护的是一个数组;LinkedList是链表结构的;HashSet依赖的是哈希表,每种容器都有自己特有的数据结构。   因为容器的内部结构不同,很多时候可能不知道该怎样去遍历一个容器中的元素。所以为了...

weixin_30412013的博客 159

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Java空集合性能优化:ArrayList与Collections.emptyList深度对比

在Java集合框架中,理解可变集合与不可变集合的设计差异是编写高性能代码的基础。可变集合如ArrayList提供了动态扩容能力,但每次实例化都会产生堆内存分配开销;而不可变空集合通过单例模式实现,实现了零内存分配和极佳的缓存局部性。从技术价值看,合理选择集合类型能显著降低GC压力、提升系统吞吐量,这在微服务架构和高并发场景中尤为重要。具体到空集合场景,Collections.emptyList()作为空对象模式的经典实现,不仅消除了繁琐的null检查,还能与Stream API无缝集成。本文通过线上故障案例

weixin_30385925的博客 472

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

面试官问:ArrayList和LinkedList有什么区别?(附图解+比喻+避坑指南)

摘要:ArrayList基于动态数组(连续内存,O(1)随机访问),LinkedList基于双向链表(离散节点,头尾操作O(1))。本文用“高铁 vs 自行车队”比喻 + 源码级对比 + 时间复杂度全景表 + CPU缓存分析 + 5道面试官追问,彻底讲透这道Java集合必考题。一句话:查多改少用ArrayList,频繁头尾操作考虑LinkedList,中间插入两者都是O(n)。

折哥|智能物流与Java实战,副高数据库工程师。深耕出版社物流WMS/OMS(线体/立库/VGA),也分享Java进阶与OMS电商对接。Oracle→PG实战派。相信沉淀可迁移能力,分享通用技术,不藏不虚。 347

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

ArrayList的容量戏法

我们还会还原一个真实的线上故障:因为异常处理不当,导致百万订单丢失的惊魂一夜!直到用VisualVM看到那锯齿状的内存曲线——原来每一次扩容,都是性能的断崖。凌晨三点,你推着塞满泡面和可乐的购物车冲向超市收银台,却发现只开放了一个柜台。今天,我们就来揭开这个"空间魔术"的真相,看看为什么默认容量是10?跳跃式增长(如10→15→22)比指数增长(10→20→40)更适配内存分配策略。:当元素挤满初始空间时,它会悄悄"开辟新柜台",把数据搬运到更大的空间。适合大多数业务场景(90%的集合元素少于10个)

tangwenjie_123的博客 592

创建List两种方法的比较:new ArrayList()与emptyList()

在每个程序员的代码生涯中,总有那么些List对象,让人记忆深刻。----引言 1.故事是这样的: 前段时间在写代码的时候,又要创建个list对象,肌肉记忆让我写下了这段: List<SonarAnalysis> sonarAnalysisList = new ArrayList<>(); 好嘛,要吐了,就不能换个高级的方式吗,这都写烂了。 行啊,去查查资料,哎还真有,于是我开开心心的写了下面这段: List<SonarAnalysis> List = Collectio

m0_46309515的博客 5727

list循环背后的故事

list循环背后的故事 今天开始我们来聊一聊集合的那些事。说到集合,最最最常用的方法估计就是遍历了。那我们就从遍历来开始深入集合。 准备数据 先新建一个ArrayList,本文中就直接采用了直接add字符串的方式,实际开发中,实体类会复杂的多。 List&lt;String&gt; list = new ArrayList&lt;&gt;(); list.add("...

微笑的小小刀 248

故事9且看珍惜

这件事已经过去了7年之久,我依然记忆犹新,从对标、思考、选择的路径,可以很顺畅的把这件事情完整的回忆出来,因为我在不经意间用了对标思维,做出了很大的改变,也让我认识了更多的朋友,去了更大规模的公司。理论上,我在上学的时候,就已经有了这么好的一个榜样,我如果早早去对标哥哥的工作路径,了解大厂的面试标准,毕业就选择进入大厂,我几乎可以少走4年的弯路,但我还是在毕业后,选择留在了济南。但当我工作之后,发现了技术上的差距,发现了工资上的差距,发现了工作环境上的差距,自己不想再浑浑噩噩下去,因此才有了改变的动力。

483

为什么ArrayList的默认容量是10,扩容因子是1.5?

ArrayList机制核心技术派对巴士的比喻初始容量第一次add时,分配容量10第一位客人上车,派来一辆10座车扩容因子1.5倍总部按“旧座位数+一半”的规则派新车核心开销所有老乘客集体换车“换车”虽然很酷,但终究是件麻烦事。如果你在组织派对之初,就预估到大概会有50位客人参加,那么最明智的做法,就是直接向巴士公司预订一辆50座的大巴(这样,你就可以避免中途多次“停车换车”的尴尬和时间浪费,让派对之旅一路顺畅!

郑龙飞 999

大厂Java面试故事:面试官与程序员谢飞机的对决

谢飞机,你辛苦了,回去等通知吧。

kikuchan_zcy的博客 392

增强型的for循环linkedlist_java集合系列(5)LinkedList

这篇文章开始介绍LinkList。他和ArrayList有一些相似,在上一篇文章讲解 ArrayList时,我们知道ArrayList是以数组实现,它的优势是查询性能高,劣势是按顺序增删性能差。如果在不确定元素数量的情况时,不建议使用ArrayList。这种情况下,我们就可以使用LinkedList了。所以这篇文章,旨在从源码的角度进行分析和理解LinkedList。OK,开始今天的文章。一、Li...

weixin_36254931的博客 361

互联网大厂Java求职面试故事:严肃面试官与搞笑谢飞机的较量

在一家知名互联网大厂的Java岗位面试中,严肃的面试官与搞笑的求职者谢飞机展开了一场有趣又深刻的技术问答。以下是面试的三个轮次问答记录。面试官: 请简述Java里ArrayList和HashMap的区别及适用场景?谢飞机: ArrayList是数组,存东西快;HashMap是个大箱子,放东西也快,两者都能存数据。面试官: 回答得不错,继续,ArrayList的扩容机制是什么样的?谢飞机: 啊,就是满了之后,咔嚓咔嚓弄个更大的数组,把原来的扔过去。面试官: 很好,你知道HashMap在多线程环境下会出现什么问

weixin_51453937的博客 383

严肃面试官与搞笑程序员谢飞机:互联网大厂Java面试故事

HashMap 是非线程安全的,因为在多线程下操作,可能会出现数据丢失的问题。:请讲讲 MyBatis 的一级缓存和二级缓存的区别,以及适用场景。:[咳咳两声,严肃面孔]谢先生,整体表现有些单薄,回去等通知吧。:可以通过批处理(batch)来优化性能,例如 MySQL 的。:假设有100万数据,需要分批插入数据库,我们该怎么做?:最后一个问题,谈谈 Redis 如何实现数据持久化?:当多个线程需要竞争锁的时候,如何避免发生死锁问题?:DDD(领域驱动设计)是什么?:让队列排队,定时开饭,最后把票撕掉!

weixin_46755643的博客 360

Java Set转List的5种方法与生产级避坑指南

在Java集合操作中,Set转List表面是基础类型转换,实则涉及泛型擦除、内存分配、线程安全与JVM优化等核心机制。理解ArrayList构造器如何预分配容量、Arrays.asList()为何因toArray()返回Object[]导致类型丢失、Stream API在链式处理与性能间的权衡,是保障类型安全转换和语义一致性的关键。该操作直接影响高并发场景下的数据一致性、百万级数据转换时的GC压力,以及金融、电商、IoT等系统中库存扣减、设备状态聚合等典型应用场景的稳定性。本文聚焦Java开发中最易被低估的

weixin_34413802的博客 471
下一篇: Java常见异常总结
FrameAndAPI
博客等级 码龄11年 1粉丝 31原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值