用java 编写一个 数组排序之后用2分法查找特定的对象。

我会排序,会查找基本类型的数组,但不知道怎么查找引用类型的数组。知道的朋友说下 谢谢了!
图片说明

排序根本上是比较元素的大小,基本类型的大小比较比较直观,用< > =就可以了。所谓引用类型也就是Object子类,需要定义比较对象大小的方法,比如课堂练习里代码就定义了compare方法,但是规法一些的做法是,需要比较大小的对象实现Comparable接口,然后再实现compare方法。
比较的方式:假设有两个对象O1和O2, 如果O1.compare(O2)的返回值大于0 则认为 "O1 大于 O2",返回值=0则认为"O1 等于 O2",否则就是O1 小于 O2。
拿上面的课堂练习来说,compare方面已经是现成的了,Data类型的实例d1和d2,判断d1 是否大于 d1 就是看d1.compare(d2)是否大于0,其中d1 !=null

不是和基本类型的数组同一个方法么。lz你的问题还不是很明确

查找引用类型的数组要看你是怎么查找需求了,是同一个对象呢(==操作)?还是对象的值是给定的值呢(对象的equals方法)?

这是我的完整代码,搞定了,谢谢 诸相非相 的提醒

public class TestSearchDate {
public static void main(String[] args){
Date[] arr = new Date[5];
arr[0] = new Date(2015,10,26);
arr[1] = new Date(2001,8,4);
arr[2] = new Date(2009,1,12);
arr[3] = new Date(2015,7,22);
arr[4] = new Date(2014,11,4);

    bubbleSort(arr);//排序

    for(int i = 0; i < arr.length; i++){
        System.out.println(arr[i]);
    }

    Date array = new Date(2015,7,22);//查找特定的对象array

    System.out.println("array的下表位置在 :"+binarySearch(arr,array));//2分法查找array的下表位子
}
//冒泡排序
public static void bubbleSort(Date[] date){
    Date temp;
    int len = date.length;
    for(int i = len-1; i >= 1; i--){
        for(int j = 0; j <= i-1; j++){
            if(date[j].compare(date[j+1]) > 0){
                temp = date[j];
                date[j] = date[j+1];
                date[j+1] = temp;
            }
        }
    }
}
//2分法查找
public static int binarySearch(Date[] date,Date num){
    if(date.length == 0){
        return -1;
    }

    int startPos = 0;
    int endPos = date.length-1;
    int m = (startPos + endPos)/2;

    while(startPos <= endPos){
        if(num.compare(date[m]) == 0){
            return m;
        }

        if(num.compare(date[m]) > 0){
            startPos = m + 1;
        }

        if(num.compare(date[m]) < 0){
            endPos = m - 1;
        }

        m = (startPos + endPos)/2;
    }
    return -1;
}

}

class Date {
int year;
int month;
int day;

Date(int year,int month,int day){
    this.year = year;
    this.month = month;
    this.day = day;
}

public int compare(Date date){
    return year > date.year ? 1
        : year < date.year ? -1
        : month > date.month ? 1
        : month < date.month ? -1
        : day > date.day ? 1
        : day < date.day ? -1
        : 0;
}

public String toString(){
    return year+" "+month+" "+day;
}

}