有没有更好的方法来创建“抽象”线性搜索? [复制]
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吧。 我只是在寻找线性搜索,而不是其他类型的搜索算法以上是关于有没有更好的方法来创建“抽象”线性搜索? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Swift 2.0 中检查 UITextField 是不是为空白?有没有更好的方法来计算字符串? [复制]
有没有更好的方法来确定大 txt 文件(1-2 GB)中的行数? [复制]