算法与数据结构-线性查找法
前言
算法与数据结构的第二篇文章
一、线性查找法
百度解释:线性查找又称顺序查找,是一种最简单的查找方法,它的基本思想是从第一个记录开始,逐个比较记录的关键字,直到和给定的K值相等,则查找成功;若比较结果与文件中n个记录的关键字都不等,则查找失败。
示例:要在一堆作业本中找到自己的作业本;第一张不是、第二张不是、……第十张是,找到。
二、代码解析
1.基本数组查找
在data数组{16,24,35,22,15,95,85,33,55,44}中查找15。
算法很简单:
输入:数组、目标元素
输出:目标所在的索引;若不存在,则返回-1。
代码如下(示例):
public class LinerSearch {
// 线性查找算法代码
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 = {16,24,35,22,15,95,85,33,55,44};
int result1 = LinerSearch.search(data, 15);
System.out.println(result1);
int result2 = LinerSearch.search(data, 20);
System.out.println(result2);
}
}
结果:
很显然,上述代码实现了我们要在数组中查找到目标元素,但是实际问题中往往不会只是在int数组中查到,我们可能会遇到在double、long、自定义类等对象数组中查找目标元素,我们此时构建的代码是无法满足的,为了让我们构建的代码更加通用,这时就需要用到泛型。
2.使用泛型优化代码
在java语言中,泛型只能存放类对象,而不能存放基本数据类型
基本数据集类型 | 对应包装类 |
---|---|
boolean | Boolean |
byte | Byte |
char | Character |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
优化代码如下(示例):
public class LinerSearch_E {
public static <E> int search(E[] data, E target) {
for (int i = 0; i < data.length; i++) {
if (data[i].equals(target)) {
return i;
}
}
return -1;
}
public static void main(String[] args) {
Integer[] data = {16,24,35,22,15,95,85,33,55,44};
int result = LinerSearch_E.search(data, 15);
//java8之前 int result = LinerSearch_E.<Integer>search(data, 15);
System.out.println(result);
}
}
注意:
结果:
备注:如果是在自定义类数组中查找目标对象,一定要在自定义类中重写equals方法,如果你不重写equals 方法,那么就是使用从Object中继承的equals方法,Object基类的中的equals 和 == 是一样的,都是比较地址。