/***** 1.线性查找算法* 目标:返回对象中所查找元素的下标* 原理:依次遍历元素与目标元素对比* 算法复杂度:O(n)* 重点:复写equals 方法*/public class LinearSearch {public static <T> int Search(T[] s, T target) throws MyException{for(int i = 0 ; i< s.length;i++){if(s[i].equals(target)){return i;}}throw new MyException("未找到该元素");}
}/**** 自定义异常*/
class MyException extends RuntimeException{public MyException(String msg){super(msg);}
}
/***** 创建实体类以供测试* 1.*/
class Dog{private String name;private Integer age;public Dog(String name,Integer age){this.name = name;this.age = age;}@Overridepublic boolean equals(Object dog){if(null == dog){return false;}if(this == dog){return true;}if(this.getClass() != dog.getClass()){return false;}Dog dogA = (Dog) dog;return this.name.equals(dogA.name) ;}
}/**** 测试方法* 1.测试结果正确性* 2.测试所用时间* 测试用例:[1,32,423,556,623,3,8]*/class LinearSearchTest{public static void main(String [] arg) {//整形数组测试Integer [] TestData ={1,32,423,556,623,3,8};try {assert LinearSearch.Search( TestData ,556) == 3;System.out.println(LinearSearch.Search( TestData ,556));}catch (MyException e){System.out.println(e.getMessage());}//实体类中元素测试Dog[] dog = {new Dog("lisi",10),new Dog("wangsan",8),new Dog("ceshi",2)};Dog wangsan = new Dog("wangsan",5);try {assert LinearSearch.Search(dog,wangsan) == 1;System.out.println(LinearSearch.Search(dog, wangsan));}catch (MyException e){System.out.println(e.getMessage());}}
}