字符串数组使用二分查找

匿名 (未验证) 提交于 2019-12-02 23:48:02

String[] name = new String[5];
name[0] = "11";
name[1] = "22";
name[2] = "33";
name[3] = "44";
//name[4] = "55";

//数组如果是满的二分查找则不会经过数组中的null值,反之则一定会用null值调方法作比较
String search = "55";
if(Arrays.binarySearch(name, search) >= 0) {  <――java.lang.NullPointerException
  for (int j = Arrays.binarySearch(name, search); j < name.length - 1; j++) {
  name[j] = name[j + 1];
  }
  name[name.length - 1] = null;
}else {
  System.out.println("没找到相应元素");
}

private static int binarySearch0(Object[] a, int fromIndex, int toIndex,Object key) {
  int low = fromIndex;
  int high = toIndex - 1;

  while (low <= high) {
    int mid = (low + high) >>> 1;
    @SuppressWarnings("rawtypes")
    Comparable midVal = (Comparable)a[mid];
    @SuppressWarnings("unchecked")
    int cmp = midVal.compareTo(key);  <――有可能会使用数组中arr[4]null值调用方法

    if (cmp < 0)
      low = mid + 1;
    else if (cmp > 0)
      high = mid - 1;
    else
      return mid; // key found
    }
    return -(low + 1); // key not found.
  }

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!