有没有更好的方法来创建 "abstract" 线性搜索?
Is there a better way of creating an "abstract" linear search?
所以我正在尝试编写可用于大多数非原始数据类型的线性搜索。
这是我使用的代码:
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;
}
我想知道是否有更好的方法或更简洁的方法。 N.B. 我只想使用线性搜索算法
谢谢
二分查找效果惊人!这很简单。
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;
}
您可以使用 List#contains
进行线性搜索。此外,在这种情况下不需要 Comparable
。
public static <T> boolean search(T needle, T[] haystack) {
return Arrays.asList(haystack).contains(needle);
}
注意:Arrays.asList
returns 数组的 List
视图。它不会复制。
所以我正在尝试编写可用于大多数非原始数据类型的线性搜索。
这是我使用的代码:
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;
}
我想知道是否有更好的方法或更简洁的方法。 N.B. 我只想使用线性搜索算法
谢谢
二分查找效果惊人!这很简单。
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;
}
您可以使用 List#contains
进行线性搜索。此外,在这种情况下不需要 Comparable
。
public static <T> boolean search(T needle, T[] haystack) {
return Arrays.asList(haystack).contains(needle);
}
注意:Arrays.asList
returns 数组的 List
视图。它不会复制。