当前位置:首页 >知识 >你能说清楚For和Foreach有什么区别吗? 什区很多人常常混淆这两者

你能说清楚For和Foreach有什么区别吗? 什区很多人常常混淆这两者

2024-06-29 08:07:09 [百科] 来源:避面尹邢网

你能说清楚For和Foreach有什么区别吗?

作者:知识创富老七 开发 后端 在Java编程的清楚世界里,For循环和Foreach循环是什区两个常见的迭代结构,用于遍历数据集合或执行重复操作。清楚然而,什区很多人常常混淆这两者,清楚不清楚它们之间的什区区别,想用哪个就用哪个。清楚今天我们就详细探讨下For循环和Foreach循环的什区不同之处,帮助你理解它们的清楚用途和适用场景,并提供一些示例来帮助你更好地掌握这两种循环。什区

今天来分享一个小知识点,清楚看看你能回答上来吗?

你能说清楚For和Foreach有什么区别吗? 什区很多人常常混淆这两者

在Java编程的什区世界里,for循环和foreach循环是清楚两个常见的迭代结构,用于遍历数据集合或执行重复操作。什区然而,清楚很多人常常混淆这两者,不清楚它们之间的区别,想用哪个就用哪个。今天我们就详细探讨下for循环和foreach循环的不同之处,帮助你理解它们的用途和适用场景,并提供一些示例来帮助你更好地掌握这两种循环。

你能说清楚For和Foreach有什么区别吗? 什区很多人常常混淆这两者

1、遍历元素

首先,上代码:
Integer[] array = { 1,2,3};for(int i=0;i<array.length;i++){   System.out.println(array[i]);}List<Integer> list = new ArrayList<>();list.add(4);list.add(5);list.add(6);for(Integer i:list){   System.out.println(i);}

遍历后结果如下:

你能说清楚For和Foreach有什么区别吗? 什区很多人常常混淆这两者

123456

我们来看看编译后的代码:

Integer[] array = new Integer[]{ 1, 2, 3};        for(int i = 0; i < array.length; ++i) {             System.out.println(array[i]);        }        List<Integer> list = new ArrayList();        list.add(4);        list.add(5);        list.add(6);        Iterator var3 = list.iterator();        while(var3.hasNext()) {             Integer i = (Integer)var3.next();            System.out.println(i);        }

数组使用的是原始的for循环,而集合使用的是iterator迭代器。

2、删除元素

使用for循环:

List<String> list = new ArrayList<>();list.add("1");list.add("2");list.add("3");System.out.println(list.toString());for (int i = 0; i <list.size(); i++) {   list.remove("2");}System.out.println(list);

结果:

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

使用foreach:

List<String> list = new ArrayList<>();list.add("1");list.add("2");list.add("3");System.out.println(list.toString());for (String i : list) {   list.remove("2");}System.out.println(list.toString());

结果:

[1, 2, 3]Exception in thread "main" java.util.ConcurrentModificationException	at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:901)	at java.util.ArrayList$Itr.next(ArrayList.java:851)	at com.example.ForDemo.main(ForDemo.java:41)

直接报错!

原因:

迭代器内部的每次遍历都会记录List内部的modcount当做预期值,然后在每次循环中用预期值与List的成员变量modCount作比较,但是普通list.remove调用的是List的remove,这时modcount++,但是iterator内记录的预期值=并没有变化,所以会报错。

如果想要删除元素的话需要使用迭代器内部的remove方法:

ArrayList<String> list = new ArrayList<>();list.add("1");list.add("2");list.add("3");System.out.println(list.toString());Iterator<String> it = list.iterator();while (it.hasNext()){   String next = it.next();  //if外使用list的remove方法还是会报错的  if(next.equals("2")){     //这里使用的是迭代器里面的remove()方法,    // 当然如果使用list的remove方法在此删除指定元素的话是也是可以成功的,比如:list.remove("2")    it.remove();  }}System.out.println(list.toString());

结果:

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

3、修改元素

使用for循环:

List<String> list = new ArrayList<>();list.add("1");list.add("2");list.add("3");System.out.println(list.toString());for (int i = 0; i <list.size(); i++) {   list.set(i,"4");}System.out.println(list.toString());

结果:

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

没问题,可以修改元素;

使用foreach:

List<String> list = new ArrayList<>();list.add("1");list.add("2");list.add("3");System.out.println(list.toString());for (String i : list) {   i="4";}System.out.println(list.toString());

结果:

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

没有变化,修改不了;

修改元素不行,修改元素的属性行不行呢?让我们来看下吧。

4、foreach修改元素属性

创建一个测试类:

public class People {     private String name;    private Integer age;    public People(){     }    public People(String name, Integer age) {         this.name = name;        this.age = age;    }    public String getName() {         return name;    }    public void setName(String name) {         this.name = name;    }    public Integer getAge() {         return age;    }    public void setAge(Integer age) {         this.age = age;    }}

哦的k,接下来测试代码:

People p1=new People("张三",20);People p2=new People("李四",21);List<People> peopleList=new ArrayList<>();peopleList.add(p1);peopleList.add(p2);System.out.println(p1.getName());System.out.println(p2.getName());for(People people:peopleList){   people.setName("王麻子");}System.out.println(p1.getName());System.out.println(p2.getName());

结果:

张三李四王麻子王麻子

Amazing!这次成功了,修改不了对象,却可以修改对象的属性。

总结

for与foreach都可以遍历数组/集合,不过for则在较复杂的循环中效率更高。foreach不可以删除/修改集合元素,而for可以foreach和for都可以修改元素里面的属性,所以相比较下来for循环更为灵活。

责任编辑:姜华 来源: 今日头条 For循环Foreach循环

(责任编辑:百科)

    推荐文章
    热点阅读