排障手册 - 电脑故障排查与系统优化实用指南

当前位置:首页 > 数码 > 正文内容

Java中不倡导经常使用foreach的六大场景 (java中不等于怎么写)

admin3年前 (2024-04-15)数码396

在中,foreach是一个罕用的循环结构,它可以极大地简化遍历数组或汇合(例如List或Set)的代码。它通常被以为是一种愈加繁复和易读的迭代形式。但是,或许有一些状况下不倡导经常使用foreach循环:

//经常使用迭代器来安保地移除汇合中的元素:importjava.util.ArrayList;importjava.util.Iterator;importjava.util.List;publicclassRemoveElement{publicstaticvoidmn(String[]args){List<String>list=newArrayList<>();list.add("A");list.add("B");list.add("C");Iterator<String>iterator=list.iterator();while(iterator.hasNext()){Stringitem=iterator.next();if(item.equals("B")){iterator.remove();//安保移除元素}}System.out.println(list);//输入结果将不蕴含"B"}}
Java中不倡导经常使用foreach的六大场景
//经常使用传统的for循环处置原始类型数组:publicclassPerformanceSensitive{publicstaticvoidmain(String[]args){int[]numbers={1,2,3,4,5};//经常使用传统for循环来防止或许的性能开支for(inti=0;i<numbers.length;i++){System.out.println(numbers[i]);}}}
//经过传统的for循环失掉索引并修负数组或列表中的元素:importjava.util.ArrayList;importjava.util.List;publicclassModifyElement{publicstaticvoidmain(String[]args){List<String>list=newArrayList<>();list.add("le");list.add("banana");list.add("cherry");for(inti=0;i<list.size();i++){list.set(i,list.get(i).toUpperCase());}System.out.println(list);//一切元素变为大写}}
//经常使用传统的for循环以失掉元素的索引:importjava.util.ArrayList;importjava.util.List;publicclassNeedIndex{publicstaticvoidmain(String[]args){List<String>list=newArrayList<>();list.add("one");list.add("two");list.add("three");for(inti=0;i<list.size();i++){System.out.println("Index"+i+":"+list.get(i));}}}
//假定有两关系联的汇合,一个是键的列表keys,另一个是值的列表valuesList<String>keys=Arrays.asList("key1","key2","key3");List<String>values=Arrays.asList("value1","value2","value3");//经常使用传统的for循环同时遍历keys和values汇合for(inti=0;i<keys.size()&&i<values.size();i++){Stringkey=keys.get(i);Stringvalue=values.get(i);System.out.println(key+":"+value);}
importjava.util.List;importjava.util.concurrent.CopyOnWriteArrayList;publicclassForeachCopyOnWriteExample{publicstaticvoidmain(String[]args){//经常使用CopyOnWriteArrayList创立线程安保的ArrayListList<String>list=newCopyOnWriteArrayList<>();list.add("Element1");list.add("Element2");list.add("Element3");//经常使用foreach循环遍历CopyOnWriteArrayListfor(Stringelement:list){System.out.println(element);//此处修正汇合内容不会影响迭代,由于经常使用的是汇合快照list.add("ElementNew");}//最后打印汇合的内容,可以看到新元素曾经被参与System.out.println("Aftermodifications:");for(Stringelement:list){System.out.println(element);}}}

CopyOnWriteArrayList类创立了一个线程安保的汇合。当咱们在foreach循环中遍历汇兼并同时向其中参与新元素时,由于CopyOnWriteArrayList外部成功了对原始汇合的复制(即创立了快照),foreach循环经常使用的是开局迭代时的汇合形态,所以迭代环节中汇合形态的扭转不会影响到迭代自身。这或许造成少量内存的额外消耗,尤其是当汇合很大时。


java中for或foreach遍历数组问题。

自从Java5中引入了foreach语句之后,在循环遍历数组、集合方面带来了极大的方便,但是在用foreach的时候也要注意其与for循环是不能完全划等号的。

在使用foreach遍历数组集合的过程中一定要注意不要修改其内容,在Java程序中会进行报错,但是在有些时候没有错误提示,就会造成花很多时间找不到问题所在。

java foreach方法

JAVA中foreach循环使用

foreach语句是java5的新特征之一,在遍历数组、集合方面,foreach为开发人员提供了极大的方便。

foreach 语法格式如下:

正确用法应该是:

扩展资料:

foreach又称增强for,是for循环的一个特殊简化版。

foreach虽然是for循环的简化版本,但是并不是说foreach就比for更好用,foreach适用于循环次数未知,或者计算循环次数比较麻烦情况下使用效率更高,但是更为复杂的一些循环还是需要用到for循环效率更高。

让我们看一下这个例子:

注意事项:

foreach不支持在循环中添加删除操作,因为在使用foreach循环的时候数组(集合)就已经被锁定不能被修改,否则会报出异常。

免责声明:本文转载或采集自网络,版权归原作者所有。本网站刊发此文旨在传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及版权、内容等问题,请联系本网,我们将在第一时间删除。同时,本网站不对所刊发内容的准确性、真实性、完整性、及时性、原创性等进行保证,请读者仅作参考,并请自行核实相关内容。对于因使用或依赖本文内容所产生的任何直接或间接损失,本网站不承担任何责任。

标签: Java

“Java中不倡导经常使用foreach的六大场景 (java中不等于怎么写)” 的相关文章

深入探讨-Java-编程中的类继承与接口实现 (深入探讨交流)

深入探讨-Java-编程中的类继承与接口实现 (深入探讨交流)

简介类索引、父类索引和接口索引是在Class文件中用于确定类的继承关系的重要数据,通过这些索引,Java虚拟机,JVM,可以准确地建立类之间的继承关系,实现多态性和接口的实现,类索引类索引用于确定类的全限定名,全限定名是指包括包名在内的类的…

选择性-过多的关键词会增加SEO工作的复杂性-关键词不应过多 (选择性太多)

选择性-过多的关键词会增加SEO工作的复杂性-关键词不应过多 (选择性太多)

引言在不断演进的软件开发领域,保持最新技术至关重要,从Java11迁移到Java21是一个明智的决定,它带来了显着的优势和创新,可以提升应用程序的安全性、性能和开发效率,主要迁移理由1.安全性,保护你的代码免受CVE漏洞侵害升级到Java2…

Java-Lambda-表白式的多面运行-从基础到初级 (java类的定义和使用)

Java-Lambda-表白式的多面运行-从基础到初级 (java类的定义和使用)

Lambda表白式是8中引入的最有影响力的性能之一,它们经过准许繁复而优雅地创立匿名函数来成功Java中的函数式编程,在这篇博文中,咱们将讨论编写lambda表白式的各种方式,概述lambda表白式是可以具备参数和主体的匿名函数,注释可以蕴…

在-Java-年依然盛行的-2023-25-个要素 (在javascript中)

在-Java-年依然盛行的-2023-25-个要素 (在javascript中)

译者,刘汪洋审校,重楼学习的环节中,我看法到在90年代末OOP正值鼎盛期间,Java作为能够真正成功这些概念的言语显得尤为突出,虽然我此前学过C,,但相比Java影响较小,我特意参观Java的平台独立性,相比繁难性,我更看重结构和分歧性,这…

消除反复编译困扰-优化效率-释放Java开发潜能 (消除反复编译命令)

消除反复编译困扰-优化效率-释放Java开发潜能 (消除反复编译命令)

在开发过程中,反复编译是一个常见的问题,特别是在大型项目或者需要频繁修改代码的情况下,每次修改代码后都需要重新编译整个项目,这样耗费了大量的时间和资源,降低了开发效率,为了解决这个问题,我们可以采取以下方法来解开Java反复编译的困扰,从而…

Java-三分钟速成-揭秘多线程编程新范式-虚拟线程 (java三目表达式)

Java-三分钟速成-揭秘多线程编程新范式-虚拟线程 (java三目表达式)

背景虚拟线程是Java语言中的一种轻量级线程,可以减少编写、维护和调试高吞吐量并发应用程序的工作量,虚拟线程的详细背景介绍可以在JEP444中找到,平台线程在操作系统中,线程是其可调度的最小处理单元,同一时刻会有很多线程同时运行,但它们之间…

彻底了解两者的弱小组合-Java与RPA (彻底了解两者的关系)

彻底了解两者的弱小组合-Java与RPA (彻底了解两者的关系)

前段期间降级系统的时刻,发现多了一个名为PowerAutomate的运行,关上了解后发现是一个智能化运行,依据其形容,可以智能口头一切日常义务,说的还是比拟夸张,繁难用了下,关于、阅读器都是支持的,同时支持基于,target=,blankc…

在不再使用时调用finalize-resources自动关闭资源-避免对长期对象使用软引用和弱引用-识别和避免Java内存泄漏的最佳实践-使用try-注意lambda表达式的引用捕获-with (不再使用时间银行)

在不再使用时调用finalize-resources自动关闭资源-避免对长期对象使用软引用和弱引用-识别和避免Java内存泄漏的最佳实践-使用try-注意lambda表达式的引用捕获-with (不再使用时间银行)

简介在Java中,内存泄漏是指程序中存在一些不再使用的对象或数据结构仍然保持对内存的引用,从而导致这些对象无法被废品回收器回收,最终导致内存占用不断增加,进而影响程序的性能和稳定性,原因内存泄漏通常由以下几个原因造成,对象生命周期管理不当如…