sparseArray里的binarySearch

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

    其实这里的~lo(取反)就至关于-(lo+1)(参看Arrays.binarySearch的实现)。为何要这样作,由于咱们不只想表示没找到,还想返回更多信息,即这个key若是要插进来应该在的位置(外面的代码只须要再次~即取反就能够获得这个信息)。spa

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

相关文章
相关标签/搜索