当列表中不存在X时,从列表中查找大于X的值

Scr*_*kie 2 java list binary-search

我试图从列表中找到大于某个值的值(在我的例子中已知).

例:

特定

list = [1, 2, 5, 10, 15];  //list is sorted
Run Code Online (Sandbox Code Playgroud)

查找大于X(=7在本例中)的值.

期望的结果=返回值为的列表= [10, 15]

我尝试使用java二进制搜索,就像

int index = Collections.binarySearch(list, X);
Run Code Online (Sandbox Code Playgroud)

我的计划是找到索引(of X)然后返回索引后的所有元素.

但索引返回否定,我明白因为7不在列表中.

还有其他方法吗?有人请建议.

Mas*_*dul 5

如果列表的排序比Collection#binarySearch将返回搜索键的索引,如果它包含在列表中; 否则,( - (插入点) - 1).你可以计算insert_point的开始索引,如下所示:

     index= -(insertion_point) - 1
     -(insertion_point)= index+1
     insertion_point=-(index+1)
Run Code Online (Sandbox Code Playgroud)

获得开始索引后List,您可以应用subList方法获得大于X的结果列表.

    Integer[] values = {1, 2, 5, 10, 15};
    List<Integer> list = new ArrayList<>(Arrays.asList(values));
    int X = 7;
    int index = Collections.binarySearch(list, X);

    int insertion_point = -(index+1); // As calculated above.

    List<Integer> res = list.subList(insertion_point, list.size());
    System.out.println(res);
Run Code Online (Sandbox Code Playgroud)

产出:[10,15]