紮實打牢資料結構演算法根基,從此不怕演算法面試系列之004 week01 02-04 使用泛型實現線性查詢法

皿哥的技術人生發表於2023-04-16

1、演算法描述

在陣列中逐個查詢元素,即遍歷。

2、上一篇文的實現結果

紮實打牢資料結構演算法根基,從此不怕演算法面試系列之003 week01 02-03 程式碼實現線性查詢法中,我們實現瞭如下程式碼:

package com.mosesmin.datastructure.week01.chap02;
/**
 * @Misson&Goal 程式碼以交朋友、傳福音
 * @ClassName LinearSearch03
 * @Description TODO
 * @Author MosesMin
 * @Date 2023/4/13
 * @Version 1.0
 */
public class LinearSearch03 {

    private LinearSearch03(){}
    public static int search(int [] data,int target){
        for (int i = 0; i < data.length; i++)
            if (data[i] == target)
                return i;
        return -1;
    }

    public static void main(String[] args) {
        int [] data = {1,18,22,10,35};
        int res = LinearSearch03.search(data,10);
        System.out.println(res);

        int res2 = LinearSearch03.search(data,666);
        System.out.println(res2);
    }
}

3、上一篇的實現結果程式碼實現

之前實現的侷限:
只支援int型。


需求:
支援所有的Java基本資料型別以及自定義的類型別。


很簡單,很多語言都有這個處理多種資料型別的機制,這種機制叫做——泛型。

Java泛型講解
泛型—— 不可以是基本資料型別,只能是類物件
Java中的8種基本資料型別
boolean、byte、char、short、int、long、float、double

完整的支援泛型的程式碼實現:

package com.mosesmin.datastructure.week01.chap02;

/**
 * @Misson&Goal 程式碼以交朋友、傳福音
 * @ClassName LinearSearch03
 * @Description TODO
 * @Author MosesMin
 * @Date 2023/4/13
 * @Version 1.0
 */
public class LinearSearch04 {

    private LinearSearch04(){}
    public static <E> int search(E [] data,E target){// 將search方法定義為泛型方法
        for (int i = 0; i < data.length; i++)
            if (data[i].equals(target))// 這裡判斷相等不能使用==了,==判斷的是引用相等,這裡需要使用判斷值相等,所以用equals方法
                return i;
        return -1;
    }

    public static void main(String[] args) {
        Integer [] data = {1,18,22,10,35};//3、所以這裡的解決方法是,將int修改為Integer
        //int res = LinearSearch04.search(data,10);// 1、這裡報錯了,因為Java中泛型只能接受類物件,不能接受基本資料型別
        //此時,這裡的引數10已經被JVM從int型別的10自動轉換為Integer型別的10了,所以不再報錯
        int res = LinearSearch04.<Integer>search(data,10); //Java7以前需要加上<Integer>這樣的泛型限定,Java8以後可以省略
        System.out.println(res);
        //int res2 = LinearSearch04.search(data,666);// 2、這裡報錯了,因為Java中泛型只能接受類物件,不能接受基本資料型別
        int res2 = LinearSearch04.search(data,666);//此時,這裡的引數10已經被JVM從int型別的666自動轉換為Integer型別的666了,所以不再報錯
        System.out.println(res2);
    }
}

每個基本資料型別都有對應的包裝類
Boolean、Byte、Character、Short、Integer、Long、Float、Double

4、執行結果

輸入:泛型的陣列data、泛型的待查詢元素target

執行結果:
mark

輸出:
查詢的元素在陣列中的索引。
查詢的第1個目標元素10,它在陣列中的索引為3;
查詢的第2個目標元素666,它不存在於陣列中,所以返回-1。

相關文章