Java集合相關(guān)

散列表的基本原理和實現(xiàn)

對于基于散列表實現(xiàn)的符號表,若我們要在其中查找一個鍵,需要進行以下步驟:
1、首先我們使用散列函數(shù)將給定鍵轉(zhuǎn)化為一個“數(shù)組的索引”,理想情況下,不同的key會被轉(zhuǎn)為不同的索引,但在實際應(yīng)用中我們會遇到不同的鍵轉(zhuǎn)為相同的索引的情況,這種情況叫做碰撞。解決碰撞的方法我們后面會具體介紹。
2、得到了索引后,我們就可以像訪問數(shù)組一樣,通過這個索引訪問到相應(yīng)的鍵值對。
以上就是散列表的核心思想,散列表是時空權(quán)衡的經(jīng)典例子。

當我們的空間無限大時,我們可以直接使用一個很大的數(shù)組來保存鍵值對,并用key作為數(shù)組索引,因為空間不受限,所以我們的鍵的取值可以無窮大,因此查找任何鍵都只需進行一次普通的數(shù)組訪問。

反過來,若對查找操作沒有任何時間限制,我們就可以直接使用鏈表來保存所有鍵值對,這樣把空間的使用降到了最低,但查找時只能順序查找。在實際的應(yīng)用中,我們的時間和空間都是有限的,所以我們必須在兩者之間做出權(quán)衡,散列表就在時間和空間的使用上找到了一個很好的平衡點。
散列表的一個優(yōu)勢在于我們只需調(diào)整散列算法的相應(yīng)參數(shù)而無需對其他部分的代碼做任何修改就能夠在時間和空間的權(quán)衡上做出策略調(diào)整。

class R
  {
    int count;
    public R(int count){
      this.count = count;
    }
public String toString(){
    return "R[count:" + count + "]";
   }
public boolean equals(Object obj){
    if(this == obj)
     return true;
    if (obj != null && obj.getClass() == R.class)  {
       R r = (R)obj;
       if (r.count == this.count)   {
          return true;
         }
      }
    return false;
  }
 public int hashCode(){
  return this.count;
  }
}

對于集合中的所有元素 e

boolean contains(Object o){
  return (o==null ? e==null : o.equals(e));
}

如果o為null,--〉如果e為null,返回為true,否則false
如果o不為null,--〉則返回o.equals(e)-->也就是如果o和e對象equal,返回true,否則false

getClass()相關(guān)

(在重寫equals()方法中用到),還有反射機制的介紹(沒看還)
http://blog.csdn.net/Ghost_T/article/details/5811974

Set的源碼分析

http://blog.csdn.net/lcore/article/details/8878893

hashCode()相關(guān) 講得很易懂啦

http://blog.csdn.net/lcore/article/details/8885022

關(guān)于HashMap的源碼分析 也講得不錯

http://blog.csdn.net/lcore/article/details/8885961

Collection源碼學習

http://blog.csdn.net/lcore/article/details/8869937

List ArrayList類的源碼學習

http://blog.csdn.net/lcore/article/details/8872565
感覺博主這個系列做的很不錯啦 20篇都值得去看下

很急很關(guān)鍵

http://blog.csdn.net/kiritor/article/category/1374228

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,115評論 25 709
  • 在此特此聲明:一下所有鏈接均來自互聯(lián)網(wǎng),在此記錄下我的查閱學習歷程,感謝各位原創(chuàng)作者的無私奉獻 ! 技術(shù)一點一點積...
    遠航的移動開發(fā)歷程閱讀 11,545評論 12 197
  • 這個主題的內(nèi)容之前分三個篇幅分享過,導致網(wǎng)絡(luò)上傳播的比較分散,所以本篇做了一個匯總,同時對部分內(nèi)容及答案做了修改,...
    JavaQ閱讀 23,908評論 9 264
  • 現(xiàn)在是9點整,以后這就是我接下來一個月的固定寫作十五分鐘時間,希望可以堅持!也更希望在開學后也依然繼續(xù)下去! 我現(xiàn)...
    雨潤新荷閱讀 447評論 0 1
  • 孤影照波光, 雙翅剪晨曦。 瑤臺千里遠, 何處是故鄉(xiāng)。
    杏林煮酒閱讀 847評論 0 4

友情鏈接更多精彩內(nèi)容