ホームページ  >  記事  >  Java  >  コレクション、ソート、およびユーティリティ メソッドの一部のジェネリックス

コレクション、ソート、およびユーティリティ メソッドの一部のジェネリックス

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-10-23 06:09:29689ブラウズ

Part Generics in Collections, Sorting, and Utility Methods

このフォローアップ投稿では、コレクション内のジェネリック、Java コレクションのタイプ セーフの概念、およびジェネリックによるコードの作成方法に焦点を当てます。より柔軟で堅牢です。さらに、汎用コレクションと便利ないくつかの高度なユーティリティ メソッドで並べ替えがどのように機能するかを調べます。

目次

  1. ジェネリックの概要
  2. リスト内のジェネリック
  3. セット内のジェネリック
  4. マップ内のジェネリック
  5. ジェネリックによる並べ替え
  6. 高度なユーティリティメソッド
  7. ジェネリックに関するよくある間違い
  8. 課題
  9. 結論

ジェネリック医薬品の紹介

Java の

ジェネリック を使用すると、任意のデータ型で動作するクラス、インターフェイス、またはメソッドを作成できます。コレクションでジェネリックを使用すると、コンパイル時に型の安全性が確保されます。これは、潜在的な ClassCastException エラーを回避し、明示的なキャストの必要性を排除できることを意味します。

例:

List<String> strings = new ArrayList<>();
strings.add("Hello");
// Adding a non-String value will now cause a compile-time error.

ジェネリックにより、指定されたデータ型のみをコレクションに保存できるようになり、実行時の問題が防止され、コードが読みやすく保守しやすくなります。

リスト内のジェネリックス

リスト内のジェネリックにより、指定されたタイプのオブジェクトのみを保存できるようになります。たとえば、List List は String オブジェクトのみを許可します。整数オブジェクトのみを許可します。

コード例

import java.util.ArrayList;
import java.util.List;

public class GenericListExample {
    public static void main(String[] args) {
        List<String> names = new ArrayList<>();
        names.add("Alice");
        names.add("Bob");

        // The following line would cause a compile-time error:
        // names.add(123); // Error: cannot add Integer to List<String>

        for (String name : names) {
            System.out.println(name);
        }
    }
}

利点

  • 型安全性: コンパイラーは、宣言された型のオブジェクトのみをリストに追加できるように強制します。
  • 明示的なキャストなし: リストから要素を取得するときにキャストする必要はありません。

セット内のジェネリックス

ジェネリックを含むセットはリストと同様に機能し、すべての要素が特定の型であることが保証されます。

コード例

import java.util.HashSet;
import java.util.Set;

public class GenericSetExample {
    public static void main(String[] args) {
        Set<Integer> numbers = new HashSet<>();
        numbers.add(10);
        numbers.add(20);
        numbers.add(30);

        // Compile-time error if a non-Integer is added:
        // numbers.add("forty"); // Error

        for (Integer num : numbers) {
            System.out.println(num);
        }
    }
}

利点

  • タイプセーフな方法で要素の一意性を維持します。
  • 意図しないタイプが追加されないようにします。

マップのジェネリックス

マップはキーと値のペアであり、キーと値の両方のジェネリックスをサポートします。たとえば、Map となります。キーが文字列で値が整数であることが強制されます。

コード例

import java.util.HashMap;
import java.util.Map;

public class GenericMapExample {
    public static void main(String[] args) {
        Map<String, Integer> phoneBook = new HashMap<>();
        phoneBook.put("Alice", 12345);
        phoneBook.put("Bob", 67890);

        // The following would cause a compile-time error:
        // phoneBook.put(123, "Charlie"); // Error

        for (Map.Entry<String, Integer> entry : phoneBook.entrySet()) {
            System.out.println(entry.getKey() + ": " + entry.getValue());
        }
    }
}

利点

  • マップ内のキーと値の両方についてタイプ セーフティを確保できます。
  • 型の混合による潜在的な実行時エラーを防ぎます。

ジェネリックを使用した並べ替え

汎用コレクションの並べ替えは簡単で、リストの場合は Collections.sort() を使用し、カスタムの並べ替えの場合は Comparable または Comparator を使用して行われます。

コード例

List<String> strings = new ArrayList<>();
strings.add("Hello");
// Adding a non-String value will now cause a compile-time error.

カスタム並べ替えの場合、Comparator インターフェイスを実装できます。

高度なユーティリティメソッド

Collections ユーティリティ クラスは、二分探索シャッフル逆引き、および 頻度カウント などの操作もサポートします。これらの操作を汎用コレクションに適用して、より強力なデータ操作を行うことができます。

コード例

import java.util.ArrayList;
import java.util.List;

public class GenericListExample {
    public static void main(String[] args) {
        List<String> names = new ArrayList<>();
        names.add("Alice");
        names.add("Bob");

        // The following line would cause a compile-time error:
        // names.add(123); // Error: cannot add Integer to List<String>

        for (String name : names) {
            System.out.println(name);
        }
    }
}

ジェネリック医薬品のよくある間違い

  • 生の型の使用: 潜在的な実行時の問題を回避するために、コレクションを使用するときは常に型パラメーターを指定します。
import java.util.HashSet;
import java.util.Set;

public class GenericSetExample {
    public static void main(String[] args) {
        Set<Integer> numbers = new HashSet<>();
        numbers.add(10);
        numbers.add(20);
        numbers.add(30);

        // Compile-time error if a non-Integer is added:
        // numbers.add("forty"); // Error

        for (Integer num : numbers) {
            System.out.println(num);
        }
    }
}
  • ワイルドカードの誤った使用: コレクションをメソッドに渡すときに、List のようなワイルドカードを使用します。またはリスト Number> を拡張します。混乱を引き起こす可能性があります。いつ使用するかを理解していますか?そして extends または super キーワード。

課題

課題 1: 汎用スタック

ジェネリックを使用して単純なスタック クラスを実装します。スタックは要素のプッシュ、要素のポップ、空かどうかのチェックをサポートする必要があります。

課題 2: カスタム オブジェクトの並べ替え

人物などのカスタム オブジェクトのリストを作成し、年齢や名前などのカスタム フィールドに基づいて並べ替えます。

結論

この投稿では、型安全性、柔軟性、使いやすさのために コレクション内のジェネリック を使用する方法を検討しました。また、コレクションの操作をより効率的にするソートおよび高度なユーティリティ方法についても説明しました。ジェネリックスをマスターすると、再利用性が高く、より堅牢でエラーのないコードを作成できます。

以上がコレクション、ソート、およびユーティリティ メソッドの一部のジェネリックスの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。