首頁 >Java >java教程 >Java 函數泛型的巢狀使用

Java 函數泛型的巢狀使用

WBOY
WBOY原創
2024-04-25 21:51:02941瀏覽

巢狀泛型允許在泛型方法中使用其他泛型類型,建立高度可重複使用的程式碼。實戰中,嵌套泛型可用於尋找數組中兩個峰值元素,範例程式碼使用泛型 Pair 儲存結果,透過迭代檢查元素與相鄰元素比較找到峰值。

Java 函数泛型的嵌套使用

Java 函數泛型的巢狀使用

泛型是一種強大的Java 語言特性,它允許我們創建可以在各種資料類型上操作的可重複使用程式碼。函數泛型允許我們在函數中使用泛型,從而增加了靈活性。

巢狀泛型

巢狀泛型是指在泛型方法內部使用其他泛型類型。這允許我們創建高度可重複使用的程式碼,特別是在處理複雜的資料結構時。

以下是一個巢狀泛型的範例:

public class Pair<T, U> {
    private T first;
    private U second;

    public Pair(T first, U second) {
        this.first = first;
        this.second = second;
    }

    public T getFirst() {
        return first;
    }

    public U getSecond() {
        return second;
    }
}

這個 Pair 類別是一個巢狀泛型,它儲存兩個類型不同的元素。

實戰案例

讓我們考慮一個需要傳回兩個峰值元素的陣列 nums 的場景。峰值元素是指比其相鄰元素都大的元素。

以下是一個使用巢狀泛型的 Java 程式碼:

public class FindPeakElements {

    public static <T extends Comparable<T>> Pair<T, T> findPeakElements(T[] nums) {
        if (nums == null || nums.length < 3) {
            throw new IllegalArgumentException("Invalid array size");
        }

        T firstPeak = nums[0];
        T secondPeak = nums[nums.length - 1];

        for (int i = 1; i < nums.length - 1; i++) {
            T current = nums[i];
            T prev = nums[i - 1];
            T next = nums[i + 1];

            if (current > prev && current > next) {
                if (current > firstPeak) {
                    secondPeak = firstPeak;
                    firstPeak = current;
                } else if (current > secondPeak) {
                    secondPeak = current;
                }
            }
        }

        return new Pair<>(firstPeak, secondPeak);
    }

    public static void main(String[] args) {
        Integer[] nums = {1, 2, 3, 4, 5, 6, 7, 6, 5, 4, 3, 2, 1};
        Pair<Integer, Integer> peaks = findPeakElements(nums);
        System.out.println("First peak: " + peaks.getFirst());
        System.out.println("Second peak: " + peaks.getSecond());
    }
}

這個程式碼使用巢狀泛型 Pair 來儲存兩個峰值元素。它透過迭代數組並檢查元素是否大於其相鄰元素來找到峰值元素。

以上是Java 函數泛型的巢狀使用的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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