首頁  >  文章  >  Java  >  集合、排序和實用方法中的部分泛型

集合、排序和實用方法中的部分泛型

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-10-23 06:09:29692瀏覽

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僅允許 String 對象,而 List 則可以只允許整數對象。

程式碼範例

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

好處

  • 您可以確保 Map 中的鍵和值的型別安全。
  • 防止混合類型造成潛在的運行時錯誤。

使用泛型排序

將通用集合進行排序非常簡單,可以使用 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 介面。

高級實用方法

集合實用程式類別也支援二分搜尋隨機播放反向頻率計數等操作。這些操作可以應用於通用集合以進行更強大的資料操作。

程式碼範例

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> 等通配符會導致錯誤。或列表可能會造成混亂。了解什麼時候使用?以及 extends 或 super 關鍵字。

挑戰

挑戰 1:通用堆疊

使用泛型實作一個簡單的堆疊類別。堆疊應該支援推送元素、彈出元素以及檢查是否為空。

挑戰 2:對自訂物件進行排序

建立自訂物件列表,例如人員,並根據年齡或姓名等自訂欄位對其進行排序。

結論

在這篇文章中,我們探討如何使用集合中的泛型來實現類型安全、靈活性和易用性。我們也討論了排序和進階實用方法,使集合的處理更有效率。透過掌握泛型,您可以編寫更健壯、無錯誤且高度可重複使用的程式碼。

以上是集合、排序和實用方法中的部分泛型的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn