如源碼所說,這個版本和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