自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

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

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

今天來分享一個小知識點,看看你能回答上來嗎?

在Java編程的世界里,for循環(huán)和foreach循環(huán)是兩個常見的迭代結構,用于遍歷數據集合或執(zhí)行重復操作。然而,很多人常?;煜@兩者,不清楚它們之間的區(qū)別,想用哪個就用哪個。今天我們就詳細探討下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);
}

遍歷后結果如下:

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

數組使用的是原始的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);

結果:

[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當做預期值,然后在每次循環(huán)中用預期值與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循環(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());

結果:

[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修改元素屬性

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

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則在較復雜的循環(huán)中效率更高。foreach不可以刪除/修改集合元素,而for可以foreach和for都可以修改元素里面的屬性,所以相比較下來for循環(huán)更為靈活。

責任編輯:姜華 來源: 今日頭條
相關推薦

2019-08-16 09:40:16

網絡計算機通信網絡

2023-12-13 13:31:00

useEffect對象瀏覽器

2020-08-02 23:20:36

JavaScriptmap()forEach()

2022-03-13 18:53:31

interfacetypeTypeScript

2020-03-02 15:17:37

云原生CNCF容器

2022-07-21 21:19:48

元宇宙

2024-05-27 00:00:00

localhostIPv6IPv4

2023-03-28 07:51:56

CPU主板平臺

2019-07-04 09:13:04

中臺百度團隊

2021-02-25 08:21:38

高可用風險故障

2020-10-29 10:35:53

Nginx架構服務器

2020-01-13 15:34:10

超融合邊緣計算架構

2024-09-23 05:10:00

微服務CORSSpringBoot

2021-02-06 21:57:40

Debug模式Release

2018-07-26 09:06:29

Java內存模型

2019-10-21 08:51:41

分布式事務CAPAP

2022-06-08 07:34:25

InnoDBdeleteMySQL

2021-07-27 08:02:45

DTO 軟件Pojo

2018-11-28 11:08:30

并查集集合數據結構

2024-03-05 18:19:07

localhostLinux數據庫
點贊
收藏

51CTO技術棧公眾號