对象数组/普通数组 查找某个元素所处索引?


一般做法:

  对数组循环逐个判断

另类做法:感觉有些狭隘,参考着用吧

  说明:使用二分搜索法来搜索指定的元素,以获得指定的值。必须在进行此调用之前对数组进行排序(通过 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