接上一篇,为了解决搜索不同数据类型的问题,引入泛型方法。
public class LinearSearch { private LinearSearch(){} public static <E>int search(E[] data, E target){ //泛型方法 for(int i = 0; i < data.length; i++) if (data[i].equals(target) ) //对结果进行比较,修改为equals方法 return i; return -1; } public static void main (String[] args) { Integer[] data = {24, 18, 12, 9, 16, 66, 32, 4}; //LinearSearch ls = new LinearSearch(); int res = LinearSearch.<Integer>search(data, 16); System.out.println(res); int res2=LinearSearch.<Integer>search(data,666); System.out.println(res2); } }
设计一个student 类
public class LinearSearch { private LinearSearch(){} 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 = {24, 18, 12, 9, 16, 66, 32, 4};//泛型只能接受类对象,不能是基本数据类型。 //LinearSearch ls = new LinearSearch(); int res = LinearSearch.<Integer>search(data, 16);//自动转换包装类;u8中可以省略<Integer> System.out.println(res); int res2=LinearSearch.<Integer>search(data,666); System.out.println(res2); Student[] students = {new Student("Alice"), new Student("Bobo"), new Student("Charles")}; Student bobo = new Student("bobo"); int res3 =LinearSearch.search(students,bobo); System.out.println(res3); } }
public class Student { private String name;//一个成员变量 public Student(String name) {//这个类的成员函数 this.name = name; } @Override public boolean equals(Object student ){ //覆盖equals if (this == student) return true; if (student == null) return false; if (this.getClass()!=student.getClass()) return false; Student another =(Student)student ; return this.name.toLowerCase().equals(another.name.toLowerCase()); }//equals 是object类的父类,对原来的进行覆盖 }