日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

你能說清楚For和Foreach有什么區別嗎?

來源: 責編: 時間:2023-10-27 17:20:08 306觀看
導讀今天來分享一個小知識點,看看你能回答上來嗎?在Java編程的世界里,for循環和foreach循環是兩個常見的迭代結構,用于遍歷數據集合或執行重復操作。然而,很多人常常混淆這兩者,不清楚它們之間的區別,想用哪個就用哪個。今天我們

G3n28資訊網——每日最新資訊28at.com

今天來分享一個小知識點,看看你能回答上來嗎?G3n28資訊網——每日最新資訊28at.com

在Java編程的世界里,for循環和foreach循環是兩個常見的迭代結構,用于遍歷數據集合或執行重復操作。然而,很多人常常混淆這兩者,不清楚它們之間的區別,想用哪個就用哪個。今天我們就詳細探討下for循環和foreach循環的不同之處,幫助你理解它們的用途和適用場景,并提供一些示例來幫助你更好地掌握這兩種循環。G3n28資訊網——每日最新資訊28at.com

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

遍歷后結果如下:G3n28資訊網——每日最新資訊28at.com

123456

我們來看看編譯后的代碼:G3n28資訊網——每日最新資訊28at.com

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迭代器。G3n28資訊網——每日最新資訊28at.com

2、刪除元素

使用for循環:G3n28資訊網——每日最新資訊28at.com

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

結果:G3n28資訊網——每日最新資訊28at.com

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

使用foreach:G3n28資訊網——每日最新資訊28at.com

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

結果:G3n28資訊網——每日最新資訊28at.com

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

直接報錯!G3n28資訊網——每日最新資訊28at.com

原因:

迭代器內部的每次遍歷都會記錄List內部的modcount當做預期值,然后在每次循環中用預期值與List的成員變量modCount作比較,但是普通list.remove調用的是List的remove,這時modcount++,但是iterator內記錄的預期值=并沒有變化,所以會報錯。G3n28資訊網——每日最新資訊28at.com

如果想要刪除元素的話需要使用迭代器內部的remove方法:G3n28資訊網——每日最新資訊28at.com

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

結果:G3n28資訊網——每日最新資訊28at.com

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

3、修改元素

使用for循環:G3n28資訊網——每日最新資訊28at.com

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

結果:G3n28資訊網——每日最新資訊28at.com

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

沒問題,可以修改元素;G3n28資訊網——每日最新資訊28at.com

使用foreach:G3n28資訊網——每日最新資訊28at.com

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

結果:G3n28資訊網——每日最新資訊28at.com

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

沒有變化,修改不了;G3n28資訊網——每日最新資訊28at.com

修改元素不行,修改元素的屬性行不行呢?讓我們來看下吧。G3n28資訊網——每日最新資訊28at.com

4、foreach修改元素屬性

創建一個測試類:G3n28資訊網——每日最新資訊28at.com

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,接下來測試代碼:G3n28資訊網——每日最新資訊28at.com

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

結果:G3n28資訊網——每日最新資訊28at.com

張三李四王麻子王麻子

Amazing!這次成功了,修改不了對象,卻可以修改對象的屬性。G3n28資訊網——每日最新資訊28at.com

總結

for與foreach都可以遍歷數組/集合,不過for則在較復雜的循環中效率更高。foreach不可以刪除/修改集合元素,而for可以foreach和for都可以修改元素里面的屬性,所以相比較下來for循環更為靈活。G3n28資訊網——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-15430-0.html你能說清楚For和Foreach有什么區別嗎?

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 亞馬遜云計算業務Q3營收230億美元 營收營業利潤雙雙創下新高

下一篇: Next.js 14 正式發布,更快、更強、更可靠!

標簽:
  • 熱門焦點
Top 主站蜘蛛池模板: 沙坪坝区| 广灵县| 文成县| 安岳县| 昌乐县| 会理县| 方城县| 桑植县| 泉州市| 牙克石市| 平乡县| 台南市| 广灵县| 福泉市| 阿图什市| 西乡县| 灌南县| 四平市| 朝阳市| 甘洛县| 托克逊县| 滁州市| 沾益县| 池州市| 徐州市| 黄浦区| 石景山区| 汶上县| 新和县| 陆川县| 长沙市| 金阳县| 安西县| 车致| 芦山县| 平昌县| 临海市| 屯昌县| 扶绥县| 淮安市| 棋牌|