当前位置:网站首页>Half of the people don't know the difference between for and foreach???
Half of the people don't know the difference between for and foreach???
2022-07-07 11:30:00 【Java technology stack】
Click on the official account ,Java dried food Timely delivery
Recommended reading :Spring Cloud Alibaba Finally unify the Jianghu !
A colleague suddenly asked me a question , Said in foreach Can I delete it list The elements inside , I said about whether I could delete , And why ; Next, let's explore whether this can be done ;
(1) Traversing elements
First , Let's take a piece of code as an example :
String[] array = {"1", "2", "3"};
for (String i : array) {
System.out.println(i);
}
ArrayList<String> list = new ArrayList<>();
list.add("111");
list.add("222");
list.add("333");
for (String i : list) {
System.out.println(i);
}
After traversal, the results are as follows :
1
2
3
111
222
333
String[] array = new String[]{"1", "2", "3"};
String[] var2 = array;
int var3 = array.length;
for(int var4 = 0; var4 < var3; ++var4) {
String i = var2[var4];
System.out.println(i);
}
ArrayList<String> list = new ArrayList();
list.add("111");
list.add("222");
list.add("333");
Iterator var7 = list.iterator();
while(var7.hasNext()) {
String i = (String)var7.next();
System.out.println(i);
}
so , Traversing the array uses the original for loop , The collection uses Iterator iterator . The latest interview questions have been sorted out , You can Java Interview library applet online brush questions .
(2) Remove elements
Oh, yes k! Next, let's delete the element :
Use for loop :
ArrayList<String> list = new ArrayList<>();
list.add("111");
list.add("222");
list.add("333");
log.info(list.toString());
for (int i = 0; i <list.size(); i++) {
list.remove("222");
}
log.info(list.toString());
11:11:52.532 [main] INFO com.xiaolinge.com.hello.HelloWord - [111, 222, 333]
11:11:52.539 [main] INFO com.xiaolinge.com.hello.HelloWord - [111, 333]
Use foreach:
ArrayList<String> list = new ArrayList<>();
list.add("111");
list.add("222");
list.add("333");
log.info(list.toString());
for (String i : list) {
list.remove("222");
}
log.info(list.toString());
11:50:48.333 [main] INFO com.xiaolinge.com.hello.HelloWord - [111, 222, 333]
Exception in thread "main" java.util.ConcurrentModificationException
at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:909)
at java.util.ArrayList$Itr.next(ArrayList.java:859)
at com.xiaolinge.com.hello.HelloWord.main(HelloWord.java:30)
Obviously, wood has success !
Click on the official account ,Java dried food Timely delivery
reason :
Every traversal inside the iterator will record List Inside modcount As expected , Then use the expected value and in each cycle List Member variables of modCount The comparison , But ordinary list.remove
It's called List Of remove, At this time modcount++
, however iterator The expected value recorded in = There is no change , So there's an error .
If you want to delete an element, you need to use the inside of the iterator remove Method :
ArrayList<String> list = new ArrayList<>();
list.add("111");
list.add("222");
list.add("333");
log.info(list.toString());
Iterator<String> it = list.iterator();
while (it.hasNext()){
String next = it.next();
//if For external use list Of remove The method will still report an error
if(next.equals("222")){
it.remove();// Here we use the inside of the iterator remove() Method ,
// Of course if you use list Of remove If the method deletes texture elements here, it is successful , such as :list.remove("222")
}
}
log.info(list.toString());
result :
12:06:14.042 [main] INFO com.xiaolinge.com.hello.HelloWord - [111, 222, 333]
12:06:14.046 [main] INFO com.xiaolinge.com.hello.HelloWord - [111, 333]
(3) Modifying elements
Use primitive for:
ArrayList<String> list = new ArrayList<>();
list.add("111");
list.add("222");
list.add("333");
log.info(list.toString());
for (int i = 0; i <list.size(); i++) {
list.set(i,"444");
}
log.info(list.toString());
result :
12:12:56.910 [main] INFO com.xiaolinge.com.hello.HelloWord - [111, 222, 333]
12:12:56.915 [main] INFO com.xiaolinge.com.hello.HelloWord - [444, 444, 444]
Oh, yes k! You can modify elements ;
Use foreach:
ArrayList<String> list = new ArrayList<>();
list.add("111");
list.add("222");
list.add("333");
log.info(list.toString());
for (String i : list) {
i="444";
}
log.info(list.toString());
result :
12:34:47.207 [main] INFO com.xiaolinge.com.hello.HelloWord - [111, 222, 333]
12:34:47.211 [main] INFO com.xiaolinge.com.hello.HelloWord - [111, 222, 333]
See , No way .
Spicy? , You can't modify elements , Can you modify the attributes of an element ? Let's take a look . The latest interview questions have been sorted out , You can Java Interview library applet online brush questions .
(4)foreach Modify element properties
(for I won't test it )
public class Student {
private int age;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
private String name;
public Student(){};
public Student(int age,String name){
this.age=age;
this.name=name;
}
}
Oh, yes k, Next, test the code :
Student student=new Student(1,"huge");
Student student1=new Student(1,"xiaoyao");
List<Student> studentList=new ArrayList<Student>();
studentList.add(student);
studentList.add(student1);
System.out.println(student.getName());
System.out.println(student1.getName());
for(Student stu:studentList)
{
stu.setName("jingtian");
}
System.out.println(student.getName());
System.out.println(student1.getName());
huge
xiaoyao
jingtian
jingtian
484 Amazing ! Can't modify the object , But you can modify the properties of the object .
summary
for And foreach Can traverse arrays / aggregate , however for It is more efficient in more complex cycles .
foreach Cannot delete / Modify set elements , and for Sure
foreach and for You can modify the attributes in the element
So by comparison for More flexible loops .
Copyright notice : This paper is about CSDN Blogger 「coder Brother Xiao Lin 」 The original article of , follow CC 4.0 BY-SA Copyright agreement , For reprint, please attach the original source link and this statement . Link to the original text :https://blog.csdn.net/qq_40521656/article/details/90749927
Spring Cloud Alibaba Finally unify the Jianghu !
Spring Boot After the scheduled task is started , How to stop automatically ?
23 Design mode and Practice ( Very comprehensive )
Spring Boot Protect sensitive configurations 4 Methods !
Face a 5 year Java, Neither thread can exchange data !
Why does Ali recommend LongAdder?
A new technical director : No code writing with headphones ..
Don't use it. System... It's time ,StopWatch Good use of explosion !
Java 8 Sort of 10 A pose , What a show !
Spring Boot Admin Born in the sky !
Spring Boot Learning notes , This is so complete !
Focus on Java Technology stack, see more dry goods
Spring Cloud Alibaba The latest combat !
边栏推荐
- Qt|多个窗口共有一个提示框类
- Input type= "password" how to solve the problem of password automatically brought in
- Verilog realizes nixie tube display driver [with source code]
- [encapsulation of time format tool functions]
- 关于jmeter中编写shell脚本json的应用
- 关于测试人生的一站式发展建议
- 科普达人丨一文弄懂什么是云计算?
- QT implements the delete method of the container
- vim 的各种用法,很实用哦,都是本人是在工作中学习和总结的
- Talk about SOC startup (11) kernel initialization
猜你喜欢
Technology sharing | packet capturing analysis TCP protocol
Excel公式知多少?
2021-05-21
通过 Play Integrity API 的 nonce 字段提高应用安全性
verilog设计抢答器【附源码】
Design intelligent weighing system based on Huawei cloud IOT (STM32)
Antd select selector drop-down box follows the scroll bar to scroll through the solution
如何在博客中添加Aplayer音乐播放器
Talk about SOC startup (VI) uboot startup process II
Input type= "password" how to solve the problem of password automatically brought in
随机推荐
科普达人丨一文弄懂什么是云计算?
关于jmeter中编写shell脚本json的应用
How to use cherry pick?
Socket socket programming
【问道】编译原理
Web端自动化测试失败的原因
Creative information was surveyed by 2 institutions: greatdb database has been deployed in 9 places
The opacity value becomes 1%
Apprentissage comparatif non supervisé des caractéristiques visuelles par les assignations de groupes de contrôle
【系统设计】指标监控和告警系统
Verilog design responder [with source code]
聊聊SOC启动(十一) 内核初始化
[untitled]
Vscode 尝试在目标目录创建文件时发生一个错误:拒绝访问【已解决】
Talk about SOC startup (VI) uboot startup process II
From pornographic live broadcast to live broadcast E-commerce
Verilog realizes nixie tube display driver [with source code]
MPX plug-in
Unsupervised learning of visual features by contracting cluster assignments
Activity lifecycle