成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

你能說清楚For和Foreach有什么區(qū)別嗎?

開發(fā) 后端
在Java編程的世界里,F(xiàn)or循環(huán)和Foreach循環(huán)是兩個(gè)常見的迭代結(jié)構(gòu),用于遍歷數(shù)據(jù)集合或執(zhí)行重復(fù)操作。然而,很多人常常混淆這兩者,不清楚它們之間的區(qū)別,想用哪個(gè)就用哪個(gè)。今天我們就詳細(xì)探討下For循環(huán)和Foreach循環(huán)的不同之處,幫助你理解它們的用途和適用場景,并提供一些示例來幫助你更好地掌握這兩種循環(huán)。

今天來分享一個(gè)小知識點(diǎn),看看你能回答上來嗎?

在Java編程的世界里,for循環(huán)和foreach循環(huán)是兩個(gè)常見的迭代結(jié)構(gòu),用于遍歷數(shù)據(jù)集合或執(zhí)行重復(fù)操作。然而,很多人常常混淆這兩者,不清楚它們之間的區(qū)別,想用哪個(gè)就用哪個(gè)。今天我們就詳細(xì)探討下for循環(huán)和foreach循環(huán)的不同之處,幫助你理解它們的用途和適用場景,并提供一些示例來幫助你更好地掌握這兩種循環(huán)。

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);
}

遍歷后結(jié)果如下:

1
2
3
4
5
6

我們來看看編譯后的代碼:

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);
        }

數(shù)組使用的是原始的for循環(huán),而集合使用的是iterator迭代器。

2、刪除元素

使用for循環(huán):

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);

結(jié)果:

[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());

結(jié)果:

[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)

直接報(bào)錯(cuò)!

原因:

迭代器內(nèi)部的每次遍歷都會記錄List內(nèi)部的modcount當(dāng)做預(yù)期值,然后在每次循環(huán)中用預(yù)期值與List的成員變量modCount作比較,但是普通list.remove調(diào)用的是List的remove,這時(shí)modcount++,但是iterator內(nèi)記錄的預(yù)期值=并沒有變化,所以會報(bào)錯(cuò)。

如果想要?jiǎng)h除元素的話需要使用迭代器內(nèi)部的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方法還是會報(bào)錯(cuò)的
  if(next.equals("2")){
    //這里使用的是迭代器里面的remove()方法,
    // 當(dāng)然如果使用list的remove方法在此刪除指定元素的話是也是可以成功的,比如:list.remove("2")
    it.remove();
  }
}
System.out.println(list.toString());

結(jié)果:

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

3、修改元素

使用for循環(huán):

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());

結(jié)果:

[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());

結(jié)果:

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

沒有變化,修改不了;

修改元素不行,修改元素的屬性行不行呢?讓我們來看下吧。

4、foreach修改元素屬性

創(chuàng)建一個(gè)測試類:

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());

結(jié)果:

張三
李四
王麻子
王麻子

Amazing!這次成功了,修改不了對象,卻可以修改對象的屬性。

總結(jié)

for與foreach都可以遍歷數(shù)組/集合,不過for則在較復(fù)雜的循環(huán)中效率更高。foreach不可以刪除/修改集合元素,而for可以foreach和for都可以修改元素里面的屬性,所以相比較下來for循環(huán)更為靈活。

責(zé)任編輯:姜華 來源: 今日頭條
相關(guān)推薦

2019-08-16 09:40:16

網(wǎng)絡(luò)計(jì)算機(jī)通信網(wǎng)絡(luò)

2023-12-13 13:31:00

useEffect對象瀏覽器

2025-05-23 10:00:00

網(wǎng)絡(luò)交換機(jī)STP

2022-03-13 18:53:31

interfacetypeTypeScript

2020-08-02 23:20:36

JavaScriptmap()forEach()

2024-05-27 00:00:00

localhostIPv6IPv4

2023-03-28 07:51:56

CPU主板平臺

2020-03-02 15:17:37

云原生CNCF容器

2019-07-04 09:13:04

中臺百度團(tuán)隊(duì)

2021-02-25 08:21:38

高可用風(fēng)險(xiǎn)故障

2022-07-21 21:19:48

元宇宙

2020-01-13 15:34:10

超融合邊緣計(jì)算架構(gòu)

2020-10-29 10:35:53

Nginx架構(gòu)服務(wù)器

2025-05-28 02:00:00

AI智能體文本

2021-02-06 21:57:40

Debug模式Release

2022-06-08 07:34:25

InnoDBdeleteMySQL

2024-09-23 05:10:00

微服務(wù)CORSSpringBoot

2018-07-26 09:06:29

Java內(nèi)存模型

2019-10-21 08:51:41

分布式事務(wù)CAPAP

2021-07-27 08:02:45

DTO 軟件Pojo
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 国产精品久久久久久久久久久新郎 | 二区av| 51ⅴ精品国产91久久久久久 | www.99热| 最新国产精品 | 一级美国黄色片 | www.亚洲视频 | 成人做爰www免费看视频网站 | 欧美日韩亚洲国产综合 | 99精品视频一区二区三区 | 国产乱码精品1区2区3区 | 美女黄频 | 久久久久国产精品www | 另类 综合 日韩 欧美 亚洲 | 亚洲午夜视频在线观看 | 久久五月婷 | 亚洲色图图片 | 亚洲高清视频一区二区 | 亚洲国产精品一区在线观看 | 欧美日韩三区 | 亚洲国产欧美91 | 亚洲永久入口 | 羞羞色在线观看 | 国产精品成人一区二区 | 91av大全 | 久久久国产一区 | 二区三区在线观看 | 91免费在线看 | 欧美日韩国产精品激情在线播放 | 国产精品久久久久久久久免费丝袜 | 欧美国产精品一区二区三区 | 亚洲免费一区二区 | 中文字幕不卡在线观看 | 啪啪网页| 欧美αv| 国产精品麻 | 欧美一级片 | 精品国产乱码久久久久久蜜柚 | 97伦理电影网 | 日日骚视频 | 国产情侣激情 |