<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          淺談Java中的Iterator接口

          共 2104字,需瀏覽 5分鐘

           ·

          2021-06-23 08:37

          使用lambda表達(dá)式遍歷集合

          Java8為Iterable接口新增了一個(gè)forEach(Consumer action)默認(rèn)方法,該方法的參數(shù)是一個(gè)函數(shù)接口。而Iterable接口是Collection接口的父接口,因此Collection也可以直接調(diào)用forEach方法。

          因?yàn)閒orEach(Consumer action)需要的是一個(gè)函數(shù)式接口,因此可以用Lambda表達(dá)式來(lái)遍歷集合元素。如下例:

          public class Test {
          public static void main(String[] args) {
          Collection c = new ArrayList();
          c.add(1);
          c.add(2);
          c.add(3);
          c.add(4);
          c.forEach(obj -> System.out.println(obj));
          }
          }
          復(fù)制代碼

          程序調(diào)用了Consumer中的唯一抽象方法accept(T t)。

          使用Iterator遍歷集合元素

          Iterator接口的對(duì)象也被稱(chēng)為迭代器。

          Iterator接口中包含如下方法:

          boolean hasNext():如果迭代器中的集合元素還沒(méi)遍歷完,返回true

          Object next():返回集合中的下一個(gè)元素
          //查看該方法的源碼可知,next是從-1開(kāi)始的,因此首次調(diào)用的時(shí)候返回的就是索引為0的元素。

          void remove():刪除集合里上一次next方法返回的元素

          void forEachRemaining(Consumer action):該方法使用Lambda表達(dá)式來(lái)遍歷集合元素
          復(fù)制代碼

          來(lái)看具體例子:

          public class Test {
          public static void main(String[] args) {
          Collection c = new ArrayList();
          c.add(1);
          c.add(2);
          c.add(3);
          c.add(4);

          Iterator iter = c.iterator();
          while(iter.hasNext()){
          //next返回的元素是object類(lèi)型,因此需要強(qiáng)制轉(zhuǎn)換
          int num = (Integer) iter.next();
          if(num==2){
          iter.remove();
          }
          System.out.println(num);
          }
          System.out.println("刪除之后的集合是"+c);
          }
          }
          復(fù)制代碼

          使用Lambda表達(dá)式遍歷Iterator

          使用Iterator中新增的forEachRemaining(Consumer action)來(lái)遍歷集合,此方法需要的參數(shù)也是一個(gè)函數(shù)式接口,因此可以使用Lambda表達(dá)式。

          來(lái)看具體例子:

          public class Test {
          public static void main(String[] args) {
          Collection c = new ArrayList();
          c.add(1);
          c.add(2);
          c.add(3);
          c.add(4);

          Iterator iter = c.iterator();
          iter.forEachRemaining(obj -> System.out.println(obj));
          }
          }

          復(fù)制代碼

          使用foreach循環(huán)遍歷集合元素

          foreach和Iterator接口類(lèi)似,foreach中的循環(huán)變量也不是集合元素本身,而是集合元素的值。修改該值并不會(huì)影響集合元素。并且使用foreach時(shí)不能修改集合元素,否則會(huì)引起ConcurrentModinficationException異常。

          來(lái)看具體例子:

          public class Test {
          public static void main(String[] args) {
          Collection c = new ArrayList();
          c.add(1);
          c.add(2);
          c.add(3);
          c.add(4);

          for(Object i : c){
          int num = (Integer)i;
          System.out.println(num);
          if(num==2){
          //引起異常
          c.remove(num);
          }
          }
          }
          }
          復(fù)制代碼

          以上就是我對(duì)Iterator接口的一些淺見(jiàn),如有不足或錯(cuò)誤之處,歡迎評(píng)論指正。


          作者:Gw_gw
          鏈接:https://juejin.cn/post/6974222444848480269
          來(lái)源:掘金
          著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處。



          瀏覽 49
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  国产大保健 | 啪视频在线观看 | 日日干av| 国产三级91 | 就操成人网 |