有没有更好的方法来创建“抽象”线性搜索? [复制]

Posted

技术标签:

【中文标题】有没有更好的方法来创建“抽象”线性搜索? [复制]【英文标题】: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;

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

谢谢

【问题讨论】:

【参考方案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吧。 我只是在寻找线性搜索,而不是其他类型的搜索算法

以上是关于有没有更好的方法来创建“抽象”线性搜索? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

从抽象类创建线程安全类

有没有更好的方法来分配/复制 shared_array

如何在 Swift 2.0 中检查 UITextField 是不是为空白?有没有更好的方法来计算字符串? [复制]

有没有更好的方法来确定大 txt 文件(1-2 GB)中的行数? [复制]

有没有更好的方法来为 Python 中的集群分配数组生成成员矩阵(单热数组)? [复制]

有没有更好的方法来反映用户端更改的 CSS 代码,而不是告诉他们请清除缓存以查看更新? [复制]