ArrayListクラスを便利に使えるイテレータを初心者向けに解説【Java入門講座】6-6 Iteratorインタフェース

แชร์
ฝัง
  • เผยแพร่เมื่อ 28 ธ.ค. 2024

ความคิดเห็น • 23

  • @takatomo5501
    @takatomo5501 หลายเดือนก่อน

    1週間集中して最後まで見終えることができました。
    今はやっと終わったーの達成感ともう終わっちゃったーのさみしさがあります笑
    どの章を見てもカイセツがほんとうに行き届いていて、「んっ・・?」って止まってしまいそうなポイントも
    手厚いカイセツと思いありのある励ましであらゆるサポートしていただけたと感じています。
    今回は、特に「オブジェクト指向の理解」が弱かったので3章.4章を重点的に見直しました。
    コードを一から書き写していると、気づかなかったところも発見できて徐々に自信がついてきました。
    まだまだ甘い点もあるかと思っているので、何度も繰り返しコード書いて次回は「あーこれね!」っと
    パッと頭の中でコードが思い浮かぶレベルを目指したいと思っています。
    やはり、アウトプットはちょーーー大事!!
    「演習問題を解く」・「コンパイル実行は省かない」
    これを続けてプログラムの動きの理解が確実に深りました。
    なるほど!なるほど!っと多く気づけたことがすごく楽しかったです。
    これからもJava講座楽しみにしています!
    周りでJavaに困っていたら、真っ先に「せかチャン」推します!
    ここまで6章まで作り上げていただきお疲れ様でした!ありがとうございました!

  • @かつ-m1d
    @かつ-m1d ปีที่แล้ว +7

    はじめまして、分かりやすい解説ありがとうございます。
    今回実演していただいたIteratorの使い方について、ArrayListとfor(int i =0;i

    • @SekaChan
      @SekaChan  ปีที่แล้ว +7

      かツさん、コメントありがとうございました。
      たしかに、Iteratorでもfor文でも同じ処理を実現できますね😄
      ただ、for文を使って書く場合は、繰り返し処理の対象クラスに合わせて書き方を調整する必要があります。
      つまり、ArrayListや他のコレクション(HashSetなど)では書き方が異なるわけですね。
      でも、Iteratorを使う場合はすべて同じような書き方で繰り返し処理を実現できます。
      相手に依存しないプログラムを書ける→再利用性や保守性が上がる、というわけですね。

    • @ASP48BKK
      @ASP48BKK ปีที่แล้ว +3

      @@SekaChanチャンネル
      なるほど納得。素晴らしい!!異なるタイプのコレクションもIteratorひとつで書けるということは、これもポリモーフィズムと言えるのでしょうか。
      ちなみに、試したところ普通の配列ではIteratorは使えないように見えます。
      あと、調べてみたら 拡張forも内部ではiteratorが機能しているそうですね。 そう考えると中身を取り出すだけなら拡張forを、iteratorの持つ豊富なメソッドを使う場合はiteratorを使う、という使い分けをするのが良いのかなと思います。この理解で良いでしょうか。

    • @SekaChan
      @SekaChan  ปีที่แล้ว +4

      @@ASP48BKK さん、コメントありがとうございます。
      すみません!たしかに配列ではIteratorを使えないですね。
      (上のコメントはそう読み取れるようになっちゃっていたので、文面を一部編集しました)
      他の部分は概ねその理解で問題ないかなと思いますが、中身を取り出すだけでiteratorが使われる場合もあります。

  • @ああ-o2k9d
    @ああ-o2k9d 8 หลายเดือนก่อน

    【メモ/自分用】
    1:16

  • @icantspeakenglish10
    @icantspeakenglish10 ปีที่แล้ว +1

    他の動画だと意外と最近のコメントいるからライバルがいてワクワクする

  • @azusa_xy
    @azusa_xy ปีที่แล้ว +3

    ここまでを1.5倍速で2日間で見ました,分かりやすい解説ありがとうございます。私の日本語はまだ上手ではありませんが、基本的な内容は理解できました。もうすぐ期末試験が迫っていますが、試験が順調に進むことを願っています。本当にありがとうございますm(_ _)m

    • @SekaChan
      @SekaChan  ปีที่แล้ว +2

      林檎さん、コメントありがとうございました!
      2日間でここまでの動画を見てくれたなんてすごいですね。
      普段から日本語を使っている人でも、そのスピードで理解できる人は少ないですよ😄
      もし「日本語はまだ上手ではありません」という言葉がなければ、外国人であることに気づかなかったくらい日本語も上手です。
      もうすぐ試験とのことですが、きっとうまくいきますよ。頑張ってくださいね!

  • @ブラウンライナー-z6t
    @ブラウンライナー-z6t 2 ปีที่แล้ว +7

    入門編見終えることができました。復習して理解を深めてから、webアプリ入門講座の方に進んでいこうと思います。
    お陰様でここまでの内容は楽しく学習することができています。ありがとうございますm(_ _)m

    • @SekaChan
      @SekaChan  2 ปีที่แล้ว +3

      ブラウン・ライナーさん、コメントありがとうございました。
      入門編、お疲れさまでした!
      webアプリ編までいくと、実際に身近で使われている技術も分かってさらに面白いですよ😄
      ブラウン・ライナーさんのペースで、じっくり学習を進めていってください!

  • @onigiriomusubi5704
    @onigiriomusubi5704 2 ปีที่แล้ว +4

    追加で質問です。
    next()メソッドでポインタを1つ進める動作は理解できたのですが、
    ポインタだけ1つ戻すことは可能なのでしょうか。
    (例えば逆順でArrayListを走査した場合などに使える?)
    APIをみてもそのようなメソッドはみあたらなかったのですが・・・

    • @SekaChan
      @SekaChan  2 ปีที่แล้ว +5

      6600V HVさん、こんにちは。
      他の方にも役立ちそうな質問コメントをありがとうございます!
      iteratorは先頭から順方向に動かすカーソルのため、逆順に走査することはできません。
      ArrayListを逆順に走査したいときは、ArrayListクラスがもつlistIterator()メソッドで取得できるListIteratorを使いますね✨
      hasNext()→next()の組み合わせと同じように、ListIteratorはhasPrevious()→previous()で逆順に走査することができます。
      (ListIteratorを取得できないコレクションクラスも多いため、動画ではより幅広く使えるIteratorを紹介しました)

    • @onigiriomusubi5704
      @onigiriomusubi5704 2 ปีที่แล้ว +3

      APIドキュメントのlistIterator()メソッド、見逃していました。まだまだ経験が必要です。忙しいなか質問に答えて頂きありがとうございました。これからもよろしくお願いします。

  • @onigiriomusubi5704
    @onigiriomusubi5704 2 ปีที่แล้ว +3

    いつも分かり易い動画をありがとうございます。
    Iterator関連で質問があります。
    動画をもとに下記のようなプログラムでhasNext()とnext()メソッドの動作を確認していたところ
    iterator()メソッド取得の場所をワザとArrayListにデータ登録前に実施したところ
    hasNext()はtrueを返してきました。(next()は例外発生しています)
    直観的にはfalseを返すと思っていましたが、どうしてtrueを返すよう設計されているのでしょうか?
    /*
    ArrayListとIterator
    */
    import java.util.ArrayList;
    import java.util.Iterator;
    public class Main {

    static void printArrayList(ArrayList list) {
    for (int i = 0; i < list.size(); i++)
    System.out.println("list[" + i + "] : " + list.get(i));
    }

    public static void main(String[] args) {
    ArrayList list = new ArrayList();
    Iterator it = list.iterator();

    list.add("Java入門講座");
    list.add("ここまで");
    list.add("よく頑張りましたね!");

    printArrayList(list);

    // Iterator it = list.iterator();

    System.out.println(it.hasNext());
    System.out.println(it.next()); // java.util.ConcurrentModificationException例外発生
    }
    }
    実行結果
    list[0] : Java入門講座
    list[1] : ここまで
    list[2] : よく頑張りましたね!
    true
    Exception in thread "main" java.util.ConcurrentModificationException
    at java.base/java.util.ArrayList$Itr.checkForComodification(ArrayList.java:1043)
    at java.base/java.util.ArrayList$Itr.next(ArrayList.java:997)
    at Main.main(Main.java:28)

    • @SekaChan
      @SekaChan  2 ปีที่แล้ว +3

      6600V HVさん、こんにちは。
      質問コメントをありがとうございました!
      hasNext()メソッドでtrueが返ってきているのは、itがlistの先頭を指し示しているためですね😄
      (itを生成した後にlistにデータを登録(add)しても、itが指し示す先はlistの先頭のままです)

    • @onigiriomusubi5704
      @onigiriomusubi5704 2 ปีที่แล้ว +2

      いつも素早い返信ありがとうございます。イテレータの生成場所(という表現でよいかどうか?)には、プログラマ側で面倒をみる必要があるということですね。itの場所そのままで実行しても例外が返ってきてしまい、プログラムが停止してしまいます。hasNext()だけでは正しく実行できるかどうかは判断できないことがわかりました。

  • @田代のチャンネル
    @田代のチャンネル 2 ปีที่แล้ว +7

    入門編ありがとうございました(๑>◡

    • @SekaChan
      @SekaChan  2 ปีที่แล้ว +2

      遊ぶニートさん、コメントありがとうございます!
      Iteratorまでよく頑張ってきましたね🎉
      たしかに4章と6章は、セミナーでも質問が多くて難しい内容です。
      ここまできたら、自力でコードを書けるようになるまであと1歩ですよ✨
      演習問題にもチャレンジしてもらうと、一気に理解が進むと思います。

  • @flakessnow2742
    @flakessnow2742 2 ปีที่แล้ว +2

    importできませんでした。

    • @SekaChan
      @SekaChan  2 ปีที่แล้ว +1

      flakes snowさん、コメントありがとうございました。
      import文を書いている場所や、importで指定しているパッケージ名などに間違いがないか確認してみてください。
      エラーメッセージなどの状況を伝えてもらえると、解決へのアドバイスができるかもしれません😄

  • @daichirerise1785
    @daichirerise1785 2 ปีที่แล้ว +6

    入門編やっと見終わりました!
    めちゃくちゃ分かりやすかったです!!!
    本当にありがとうございましたm(_ _)m
    ネクストドアさんを今後も応援してます!!!
    今後の実践編系の動画が上がると嬉しいです!笑 |ω・)

    • @SekaChan
      @SekaChan  2 ปีที่แล้ว +2

      Daichi re:riseさん、コメントありがとうございました!
      もう入門編が見終わったって、かなり早いですね。
      こちらこそ、動画を見てくれたりコメントを残してくれたりしてもらって本当にありがとうございます✨
      (今やってるWebアプリ編は実践編の1つなので、もし必要なときがきたら見てもらえたら)
      新人研修や職務デビューも頑張ってくださいね!!