sparseArray里的binarySearch

    如源码所说,这个版本和java.util.Arrays.java里的实现一样,只是省略了参数检查。二分查找大家大学都接触过,应该印象都比较深刻,这里只说一点即最后没找到时的返回值~lo。如方法的doc所说,没找到的情况下会返回一个负值,那到底返回哪个负值呢,-1行不?

    其实这里的~lo(取反)就相当于-(lo+1)(参看Arrays.binarySearch的实现)。为什么要这样做,因为我们不仅想表示没找到,还想返回更多信息,即这个key如果要插进来应该在的位置(外面的代码只需要再次~即取反就可以得到这个信息)。

    接下来回到刚才的get方法,明白了这里使用的二分查找这个方法就非常简单明了了。get内部通过binarySearch的返回值来做判断,如果是负的或i>=0但是位置i已经被标记为删除了,则返回valueIfKeyNotFound,否则直接返回(E) mValues[i]。


你可能感兴趣的:(sparseArray里的binarySearch)