我会排序,会查找基本类型的数组,但不知道怎么查找引用类型的数组。知道的朋友说下 谢谢了!
排序根本上是比较元素的大小,基本类型的大小比较比较直观,用< > =就可以了。所谓引用类型也就是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;
}
}