一般做法:
對數組循環逐個判斷
另類做法:感覺有些狹隘,參考着用吧
說明:使用二分搜索法來搜索指定的元素,以獲得指定的值。必須在進行此調用之前對數組進行排序(通過 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 + "]"; } }