日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
你能說清楚For和Foreach有什么區(qū)別嗎?

今天來分享一個(gè)小知識(shí)點(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 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 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 list = new ArrayList<>();
list.add("1");
list.add("2");
list.add("3");
System.out.println(list.toString());
for (int i = 0; i 

結(jié)果:

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

使用foreach:

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

如果想要?jiǎng)h除元素的話需要使用迭代器內(nèi)部的remove方法:

ArrayList list = new ArrayList<>();
list.add("1");
list.add("2");
list.add("3");
System.out.println(list.toString());
Iterator it = list.iterator();
while (it.hasNext()){
  String next = it.next();
  //if外使用list的remove方法還是會(huì)報(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 list = new ArrayList<>();
list.add("1");
list.add("2");
list.add("3");
System.out.println(list.toString());
for (int i = 0; i 

結(jié)果:

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

沒問題,可以修改元素;

使用foreach:

List 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 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!這次成功了,修改不了對(duì)象,卻可以修改對(duì)象的屬性。

總結(jié)

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


當(dāng)前文章:你能說清楚For和Foreach有什么區(qū)別嗎?
轉(zhuǎn)載注明:http://www.5511xx.com/article/dpodspi.html