對象數組/普通數組 查找某個元素所處索引?


一般做法:

  對數組循環逐個判斷

另類做法:感覺有些狹隘,參考着用吧

  說明:使用二分搜索法來搜索指定的元素,以獲得指定的值。必須在進行此調用之前對數組進行排序(通過 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 + "]";
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM