java泛型 二分查找

2024-12-25 10:01:56
推荐回答(3个)
回答1:

以下代码是关于对象的 二分查找 的例子,已经测试通过,执行即可。
Student 是基本比较对象类
Dichotomy 是二分法执行类
Test 是测试类

package com.dichotomy;

public class Student implements Comparable {

private int id;
private String name;
private String idCard;
private String sex;
private String mobile;

public int getId() {
return id;
}

public void setId(int id) {
this.id = id;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public String getIdCard() {
return idCard;
}

public void setIdCard(String idCard) {
this.idCard = idCard;
}

public String getSex() {
return sex;
}

public void setSex(String sex) {
this.sex = sex;
}

public String getMobile() {
return mobile;
}

public void setMobile(String mobile) {
this.mobile = mobile;
}

/**
* 排序控制
* @param o1 Student
* @param o2 Student
* @return int 返回 -1 向前移动, 1 向后移动, 0 不移动
* 这个方法需要自己进行调整,排序比较和二分查找时均使用此方法进行位置调整
* 比较时使用的key自己可以进行修改,不过要保证唯一性,否则查询出来的值会不准确
*/
public int compareTo(Student o) {

//不同的执行次序决定排序和查找次序不同,可以同下面的调换一下
if(this.getId() < o.getId()){
return -1;
} else if(this.getId() == o.getId()){
;
} else {
return 1;
}

//不同的执行次序决定排序和查找次序不同
int c = this.getIdCard().compareTo(o.getIdCard());
if(c != 0){
return c;
}

//不同的执行次序决定排序和查找次序不同
int n = this.getName().compareTo(o.getName());

if(n != 0){
return n;
}

return 0;
}

public String toString(){
StringBuffer sb = new StringBuffer();
sb.append(this.getId()).append("\t");
sb.append(this.getName()).append("\t");
sb.append(this.getIdCard()).append("\t");
sb.append(this.getMobile()).append("\t");
sb.append(this.getSex());
return sb.toString();
}
}

回答2:

你可以参考java.util.Arrays这个类,里面提供非常全的数组操作,包括你要的查找,还有排序等,而且针对任何类型。
源码可以参考你C:\Program Files\Java\jdk1.6.0_11下src.zip文件里面java\until\Arrays.java

回答3:

1、实现comparable接口,实现compareTo()方法。
2、把你那段算法里所有array[...]和value之间的>、<、==比较,改用value.compareTo(array[...]) == 0、value.compareTo(array[...]) > 0、value.compareTo(array[...]) < 0