二分法查找list并进行数据的增删改
系统提供的方法是对升序list或数组进行查找
返回的值>0则代表找到,小于0表示没有找到
如果小于0 那么取反则是数据需要插入的位置
list和数组的查找系统提供的方法为 :
Collections.binarySearch()
ContainerHelpers.binarySearch()
public class Test {
/**
* 对降序list进行查找
*/
private static <T>
int indexedBinarySearch(List<? extends Comparable<? super T>> list, T key) {
int low = 0;
int high = list.size()-1;
while (low <= high) {
int mid = (low + high) >>> 1;
Comparable<? super T> midVal = list.get(mid);
int cmp = midVal.compareTo(key);
if (cmp < 0)
high = mid - 1;
else if (cmp > 0)
low = mid + 1;
else
return mid; // key found
}
return -(low + 1); // key not found
}
public static void test() {