Java数组中查找

来源:百度知道 编辑:UC知道 时间:2024/07/02 02:44:37
import java.util.*;
class A implements Comparable
{
int i,j;
public A(int a1,int a2)
{
i=a1;
j=a2;
}
public int compareTo(Object obj)
{
int k=((A)obj).i;
if(k>i)
return -1;
else if(k==i)
return 0;
else
return 1;
}
public String toString()
{
return "("+i+","+j+")";
}
}
public class M
{

public static void main(String[] args)
{
A[] a={new A(5,2),new A(2,3),new A(3,1)};
Arrays.sort(a);

System.out.println(Arrays.toString(a));
int loc;
A obj1=new A(2,3);
loc=Arrays.binarySearch(a,obj1);
System.out.print(loc);

}
}

上面是用来查找数组中是否存在一个对象的。
为什么A(3,1) A(3,2)都会显示 loc>0呢 按书上说应该是后者loc <0

那要怎么样才能在数组中查找一个A对象是否存在呢

你的A类中compareTo方法已经决定了A类对象比较时只比较i。那么在这个意义上A(3,2)和A(3,1)被认为是相等对象。所以你查找时能找到。

binarySearch
public static int binarySearch(Object[] a,
Object key)使用二分搜索法来搜索指定数组,以获得指定对象。在进行此调用之前,必须根据元素的自然顺序对数组进行升序排序(通过 sort(Object[]) 方法)。如果没有对数组进行排序,则结果是不确定的。(如果数组包含不可相互比较的元素(例如,字符串和整数),则无法 根据其元素的自然顺序对数组进行排序,因此结果是不确定的。)如果数组包含多个等于指定对象的元素,则无法保证找到的是哪一个。

参数:
a - 要搜索的数组
key - 要搜索的值
返回:
如果它包含在数组中,则返回搜索键的索引;否则返回 (-(插入点) - 1)。插入点 被定义为将键插入数组的那一点:即第一个大于此键的元素索引,如果数组中的所有元素都小于指定的键,则为 a.length。注意,这保证了当且仅当此键被找到时,返回的值将 >= 0。
抛出:
ClassCastException - 如果搜索的键不能与数组的元素进行比较。

应该和你的compareTo()方法有关。 比较的时候i和j都要比较。