主要核心点为其中的rank()函数,使用了二分查找法的思想,从而达到在创建键值对的时候使Key数组达到有序性。
public class BinarySearchBT <Key extends Comparable<Key>,Value>{
private Key[] keys;
private Value[] values;
private int N;
public BinarySearchBT(int capacity){
/* java不允许创建泛型数组
**因Key值需要多次的比较其大小从而实现Key数组的有序化,所以选用Comparable数组
**因此创建Value数组时选用Object对象数组*/
keys = (Key[]) new Comparable[capacity];
values = (Value[]) new Object[capacity];
}
public int size(){
return N;
}
public boolean isEmpty(){
return N==0;
}
// 使用二分查找法的思想
public int rank(Key key){
int lo=0,hi=N-1;
while (lo<hi){
int mid = lo+(hi-lo)/2;
int cmp = key.compareTo(keys[mid]);
if (cmp>0) lo=mid+1;
else if (cmp<0) hi=mid-1;
else return mid;
}
return lo;
}
public Value get(Key key){
if (isEmpty()) return null;
int i = rank(key);
if (i<N && key.compareTo(keys[i])==0)return values[i];
else return null;
}
public void put(Key key,Value value){
int i = rank(key);
if (i<N && key.compareTo(keys[i])==0){
values[i] = value;
}
for (int j=N;j>i;j--){
keys[j] = keys[j-1];
values[j] = values[j-1];
}
keys[i] = key;
values[i] = value;
N++;
}
}