【问题标题】:Is there a better way of creating an "abstract" linear search? [duplicate]有没有更好的方法来创建“抽象”线性搜索? [复制]
【发布时间】:2016-07-02 23:36:16
【问题描述】:

所以我正在尝试编写可用于大多数非原始数据类型的线性搜索。

这是我正在使用的代码:

public static <T> boolean search(Comparable<T> key, T[] array) {
    for(int i = 0; i < array.length; i++) {
        if(array[i].equals(key)) {
            return true;
        }
    }
    return false;
}

我想知道是否有更好的方法可以做到这一点,或者更整洁的方法。 注意我只是想使用线性搜索算法

谢谢

【问题讨论】:

    标签: java search linear-search


    【解决方案1】:

    您可以使用List#contains 进行线性搜索。此外,在这种情况下不需要Comparable

    public static <T> boolean search(T needle, T[] haystack) {
        return Arrays.asList(haystack).contains(needle);
    }
    

    注意:Arrays.asList 返回数组的 List 视图。它不会复制。

    【讨论】:

    • 不使用 Arrays 实现,我上面的回答还不够吗?
    • 是的。虽然不需要Comparable。您也可以使用foreach 循环。
    【解决方案2】:

    二分搜索效果惊人!这很简单。

    public static <T> boolean search(Comparable<T> key, T[] array) {
        int start = 0;
        int end = array.length - 1;
        while (start <= end) {
            int mid = (start + end) / 2;
            if (key == array[mid]) {
                return true;
            }
            if (key < array[mid]) {
                end = mid - 1;
            } else {
                start = mid + 1;
            }
        }
        return false;
    }
    

    【讨论】:

    • 请在答案本身中包含相关部分,而不是转储链接。链接会随着时间而中断。
    • 知道了!决定写代码,直接帮OP吧。
    • 我只是在寻找线性搜索,而不是其他类型的搜索算法
    猜你喜欢
    • 1970-01-01
    • 2012-10-28
    • 2017-04-10
    • 2013-04-04
    • 1970-01-01
    • 2018-04-20
    • 1970-01-01
    • 1970-01-01
    • 2019-12-08
    相关资源
    最近更新 更多