一般做法:
对数组循环逐个判断
另类做法:感觉有些狭隘,参考着用吧
说明:使用二分搜索法来搜索指定的元素,以获得指定的值。必须在进行此调用之前对数组进行排序(通过 sort() 方法)。如果没有对数组进行排序,则结果是不确定的。如果数组包含多个带有指定值的元素,则无法保证找到的是哪一个。
注意:如果被查询的元素存在则返回所在的索引下标值,如不存在则返回排序后应该插入位置的索引+1
附:这种做法返回的是排序后的索引,所以有些场合不太合适。Array.sort()方法应该注意传入的如果是对象,则该对象类需要实现Comparable接口。
举例1:
long[] arr = {78,111,45,67,127}; Arrays.sort(arr); System.out.println(Arrays.binarySearch(arr, 111));
举例2:
package com; import java.io.UnsupportedEncodingException; import java.util.ArrayList; import java.util.Arrays; import java.util.HashSet; import java.util.List; import java.util.Set; import com.bean.Person; public class YY { public static void main(String[] args) throws UnsupportedEncodingException { Person person1 = new Person("xm1", 12); Person person2 = new Person("xm2", 12); Person person3 = new Person("xm3", 12); Person[] arrs = new Person[] { person1, person2, person3}; Arrays.sort(arrs); System.out.print(Arrays.binarySearch(arrs, person3)); } }
package com.bean; public class Person implements Comparable<Person>{ private String name; private int age; public Person(String name, int age) { super(); this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public int compareTo(Person o) { if(this.name.compareTo(o.getName()) < 0){ return -1; }else if(this.name.compareTo(o.getName()) > 0){ return 1; } return 0; } @Override public String toString() { return "Person [name=" + name + ", age=" + age + "]"; } }