前言
线性查找又称顺序查找,是一种最简单的查找方法,其基本思想是从第一个记录开始,逐个比较记录的关键字,直到和给定的值相等,则查找成功;若比较结果与文件中的记录都不等,则查找失败。
具体实现
- 实现类
public class LinearSearch {
/**
* 私有构造函数,该类不被别人创建,直接使用该类的search函数
*/
private LinearSearch(){}
/**
* 泛型线性查找
* 于自定义的类,要重写equals方法
* @param data
* @param target
* @param <T>
* @return
*/
public static <T> int search(T[] data, T 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 = {11, 12, 66, 34, 65, 36, 60};
int result = LinearSearch.search(data, 34);
System.out.println(result);
/**
* 测试二 自定义类
*/
Student[] students = {
new Student("1", "张三"),
new Student("2", "李四"),
new Student("3", "王二")
};
System.out.println(LinearSearch.search(students, new Student("3", "王二")));
}
}
- 自定义类
public class Student {
private String id;
private String name;
public Student(String id, String name) {
this.id = id;
this.name = name;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
/**
* 重新equals方法
* @param obj
* @return
*/
@Override
public boolean equals(Object obj) {
if (this == obj) {
//地址相等
return true;
}
if (obj == null) {
return false;
}
if (obj.getClass() != this.getClass()) {
return false;
}
/**
* 需要比较的字段相等,则这两个对象相等
*/
Student other = (Student) obj;
return this.name.equals(other.name) && this.id.equals(other.id);
}
}