JavaRush /Java Blog /Random-JA /コーヒーブレイク #167。Java 面接の前に確認すべきこと。Javaの列挙型とイテレータの違いは何ですか?

コーヒーブレイク #167。Java 面接の前に確認すべきこと。Javaの列挙型とイテレータの違いは何ですか?

Random-JA グループに公開済み

Java 面接の前に確認すべきこと

出典: Medium この記事では、Java の面接に役立つ経験豊富な開発者からの 17 のヒントを紹介します。 コーヒーブレイク #167。 Java 面接の前に確認すべきこと。 Javaの列挙型とイテレータの違いは何ですか?  - 1私は IT 業界で 20 年以上働いており、その時間のほとんどを Java の作業に費やしてきました。さらに、Java 開発者にインタビューすることでかなりの経験を積みました。Java 言語は常に進化していますが、中心となる概念はほとんど変わっていません。ここでは、面接に臨む前に、意欲的な開発者に共有したいヒントをいくつか紹介します。それらを繰り返せば、重大な間違いを防ぐことができます。
  1. オブジェクトクラスは、Java クラス階層のルートにあります。すべての Java クラスはObjectまで遡ります。クラスが明示的にクラスを拡張していない場合でも、Objectを拡張します。ただし、クラスはオブジェクトを明示的に自由に拡張できます。

  2. Java では、拡張できるクラスは 1 つだけです (曖昧さのため多重継承は許可されていません)。ただし、クラスは同時に任意の数のインターフェイスを実装できます。

  3. インターフェイスは (実装とは対照的に) 別のインターフェイスを拡張します。

  4. Java には、public (誰でも利用可能)、protected (サブクラスのみ利用可能)、private (単一クラス内でのみ利用可能)、default (単一パッケージ内で利用可能) の 4 つのアクセス修飾子があります。同じクラスのサブクラスが異なるパッケージに存在する可能性があることに注意してください。親クラスとサブクラスは同じパッケージの一部である必要はありません。

  5. クラス文字列は不変です。不変性とは、Stringクラス自体がString参照内の値を置き換えるメソッドを提供しないことを意味します。文字列参照の値を置き換える場合は、=演算子を使用して値を明示的に割り当てる必要があります。これをStringBuffer クラスStringBuilderクラスと比較してください。これらのクラスには append などのメソッドがあるため、そこで=演算子を使用する必要はありません。

  6. ConcurrentHashMap はHashtableよりも効率的です。ConcurrentHashMap は基礎となるデータ構造のセグメントに対して動作し、書き込み操作では (キーがどのセグメントに属しているかに関係なく) 特定のセグメントのみをロックします。ただし、Hashtableではデータ構造全体がロックされます。

  7. HashMapはスレッド セーフを実装していないため、ConcurrentHashMapはHashMapよりも遅くなります。スレッドがHashMap を反復処理し、別のスレッドが同じHashMapを変更しようとすると、HashMap はConcurrentModificationExceptionをスローすることがあります。ConcurrentHashMap はここで例外をスローしません。

  8. 定義した同じクラスの 2 つのオブジェクトの等価性を実装するにはどうすればよいでしょうか? 回答: これは、 hashcode()メソッドをオーバーライドすることで実行できます。

  9. toString()メソッドのデフォルトの結果は何ですか? 回答: これは、クラス名、@記号、およびhashcode()値を連結したものです。

  10. Java でポリモーフィズムを実装するにはどうすればよいですか? これを行う 1 つの方法は、メソッドをオーバーロードすることです。もう 1 つの方法は、メソッドをオーバーライドすることです。

  11. 子クラスからスーパークラスのコンストラクターを呼び出すにはどうすればよいでしょうか? 回答: これはsuper()キーワードを使用して実行できます。引数のないsuper()メソッドは、明示的に指定されていなくても常に呼び出されます。引数付きのsuper()メソッドは明示的に指定する必要があります。super()の呼び出し(引数の有無にかかわらず) を呼び出す必要がある場合は、常に子クラスのコンストラクターの最初の行にする必要があります。

  12. チェック済み例外とチェックなし例外とは何ですか? 回答: チェック例外とは、スローされることが予想されるメソッド内で宣言またはキャッチする必要がある例外です。チェックされていない例外には、この制限はありません。java.io.IOException は、チェック例外の例です。未チェックの例外はRunTimeExceptionクラスから発生します。

  13. 例外階層のルート クラスはThrowableです(これは暗黙的にObjectを拡張します)。例外エラーはThrowableから発生します。

  14. Java 8 以降、メソッドはインターフェイスに実装できるようになりました。デフォルト メソッドと静的メソッドには実装を含めることができます。

  15. 抽象クラスとして認定されたクラスはインスタンス化できません。いずれのメソッドにも本体を提供しないクラスは、抽象として宣言する必要があります。開発者は、すべてのメソッドに本体がある場合でもクラスを抽象として宣言できますが、この場合はクラスをインスタンス化できないため、これはあまりお勧めできません。

  16. 最終クラスは拡張できません。最終変数に別の値を割り当てることはできません。最終メソッドをオーバーライドすることはできません。

  17. try-catch-finally構造にはどのようなキーワードが必要ですか? これは、 try-catchtry-finally、または 3 つすべての可能性があります。この場合、catch は必須のキーワードではありません。

Javaの列挙型とイテレータの違いは何ですか?

出典: Rrtutors この投稿では、Java における列挙と反復の違いについて説明します。Java.util パッケージは、Collectionオブジェクトの要素を走査するための 2 つのインターフェイス、EnumerationIteratorを提供します。どちらもCollectionオブジェクトを通過しますが、それらの間にはいくつかの違いがあります。

enum とイテレータの違い

  • JDK に追加される時間: JDKはさまざまなタイミングで導入されます。Enum は JDK 1.0 で導入され、イテレータは JDK 1.2 で導入されました。

  • 要素の削除:これが 2 つの主な違いです。Iteratorインターフェイスでは、 Collectionオブジェクトを反復するときに要素を削除できますが、 Enumerationを使用してCollectionオブジェクトを反復するときは要素を変更できません。これは、Iteratorインターフェースにはremove()メソッドがありますが、 Enumerationインターフェースにはそれがないためです。

  • 操作タイプ:イテレータにはフェイルファスト操作タイプがあり、列挙にはフェイルセーフ操作タイプがあります。その結果、Iterator は、反復中にコレクションが変更されると、独自のRemove()メソッドが使用されない限りConcurrentModificationExceptionをスローしますが、Enumeration は、反復中にコレクションが変更されても例外をスローしません。

Java での列挙とイテレータの例

列挙の例

import java.util.ArrayList;

import java.util.Arrays;

import java.util.Enumeration;

import java.util.List;

import java.util.Vector;

public class Enumeration_Example {

      public static void main(String[] args) {

                  List laptoplist = new ArrayList(Arrays.asList( new String[] {"Samsung", "Lenovo", "Apple", "HP"}));

            Vector vectali = new Vector(laptoplist);

            delete(vectali, "Samsung");

        }

        private static void delete(Vector vectali, String laptop) {

            Enumeration lapi = vectali.elements();

            while (lapi.hasMoreElements()) {

              String s = (String) lapi.nextElement();

              if (s.equals(laptop)) {

                  vectali.remove(laptop);

              }

            }

            System.out.println("The Laptop brands includes:");

            lapi = vectali.elements();

            while (lapi.hasMoreElements()) {

              System.out.println(lapi.nextElement());

            }

      }

}
結論:
ラップトップのブランドには次のものが含まれます: Lenovo Apple HP

イテレータの例:

import java.util.ArrayList;

import java.util.Arrays;

import java.util.Iterator;

import java.util.List;

import java.util.Vector;

public class Iterator_example {

      public static void main(String[] args) {

                  List laptoplist = new ArrayList(Arrays.asList( new String[] {"Samsung", "Lenovo", "HP", "Apple"}));

            Vector vectali = new Vector(laptoplist);

            delete(vectali, "HP");

        }

        private static void delete(Vector vectali, String name) {

            Iterator a = vectali.iterator();

            while (a.hasNext()) {

              String s = (String) a.next();

              if (s.equals(name)) {

                  a.remove();

              }

            }

            // Display the names

            System.out.println("The laptop brand includes:");

            a = vectali.iterator();

            while (a.hasNext()) {

              System.out.println(a.next());

            }

      }

}
結論:
ラップトップのブランドには以下が含まれます: Samsung Lenovo Apple
コメント
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION