Arrays.binarySearch的行为

时间:2015-07-01 09:11:12

标签: java arrays binary-search

我的目的是在循环遍历excel文件时跳过一些预定义的行,如下所示:

int rowIndex = 0;
int[] rowsToBeSkipped = new int[]{1,2,15,16,17,18,31,32,33,34};

while (rowIterator.hasNext()) 
{
    Row row = rowIterator.next();
    if(Arrays.binarySearch(rowsToBeSkipped, rowIndex) == -1){
        System.out.println("true "+rowIndex);
    }else{
        System.out.println("false "+rowIndex);
    }
        rowIndex++;
    }
}

以下是结果:

true 0
false 1
false 2
false 3
false 4
false 5
false 6
false 7
false 8
false 9
false 10
false 11
false 12
false 13
false 14
false 15
false 16
false 17
false 18
false 19
false 20
false 21
false 22
false 23
false 24
false 25
false 26
false 27
false 28
false 29
false 30
false 31
false 32
false 33
false 34
false 35
false 36
false 37
false 38
false 39
false 40
false 41

任何人都可以解释为什么只有0可以匹配条件吗?

1 个答案:

答案 0 :(得分:9)

您滥用此方法。引用其文档(强调我的):

  

返回:      搜索键的索引,如果它包含在数组中; 否则,( - (插入点) - 1)。插入点定义为将键插入数组的点

这意味着当且仅当您尝试搜索的值将插入数组的开头时,此方法才会返回-1 - 这里的情况为0。

您应该测试严格小于0的任何值,而不仅仅是-1:

if (Arrays.binarySearch(rowsToBeSkipped, rowIndex) < 0) {
    // etc