HashSet檢索方法與集合框架體系

HashSet檢索方法:

  首先申請一個返回值爲boolean類型的方法參數類型依然爲Object,前面同樣的使用添加方法裏的判斷和計算傳進來對象的hash值。還需要判斷一下傳進來的值是否爲null,爲null的話就報空指針異常,因爲傳遞的值既然爲null肯定沒法進行其他的操作,直接報出異常讓方法結束:

d982f2b343bcd2a037d05885fffac0ca.png


如果傳進來的值不爲null,就聲明一個變量名爲hashcodeint類型變量,然後使用傳進來的對象調用hashCode方法獲取到這個對象的hash值,存儲到這個變量裏:

73d86ab5897f393553ce756ae24d5efd.png



  接着判斷一下這個得到的hash值是否爲負數,爲負數的話就要取反成正數,不然接下來無法得出數組下標,因爲都知道數組下標是沒有負數的:

9bf60d6c9d3917084db6373483c2b1f1.png


  確保得到的hash值是正數後,就申請一個變量名爲indexint類型變量,把hashcode取餘於數組的長度後得到數組的下標,儲存到變量中:

85221b561dc9f4dee86851e3786f0e39.png


  得到數組下標後,先判斷一下在數組裏的這個下標是否爲null,也就是看一下這裏面有沒有存儲到數據,如果爲null的話自然是什麼都沒有,所以就返回一個false出去:

2843537d9e5fc38106184f4e272e527e.png


經過判斷後不爲null就代表這個數組下標裏儲存着數據,有數據的話就申請一個Object數組把這裏面的數組先拿出來,因爲HashSet集合裏存儲值的時候是使用的單鏈,所以需要強制轉換成數組:

817b2408132f94c6d30c7ba860e93c0a.png


把數組拿出來後,先寫一個死循環來進行查找,直到找到才結束循環,所以先在循環裏判斷拿出來的值是否爲null,是的話就代表沒有,返回一個false,不爲null則使用這個數組裏存儲數據的下標來訪問equals方法判斷一下里面的對象內容是否爲傳進來的參數內容,是的話就返回一個true,如果沒通過判斷就進入else部分繼續往下找,直到滿足某一個判斷條件來結束方法:

39521a5ab6f7a948ef3b659b8e64eecb.png


代碼示例:

c22e058bf1b695901a9afee94ebec707.png

4407c6f84bae374b17d01834a3002538.png


運行結果:

3739b65c52bedc456689b4f2ec282d80.png




集合框架體系:

在集合框架體系中,Collection接口是整個集合框架中最高接口,裏面定製了集合最基本的所有方法。

 

Collection接口產生了兩個分支點,一個是Set接口,一個是List接口

 

Set系列的特點是散開的,無序的,不能夠添加重複值的。Set系列的優點是查找速度快,缺點是添加速度慢,所以適合用於檢索量大的事情

 

List系列的特點是有序的,可以添加重複值的。它的優點是添加的速度快,缺點是查找的速度慢。所以適合用於添加大量數組的事情上

 

Set系列的集合有:HashSet是無序的,hash值結構集合  TreeSet排序的,二叉樹結構集合

 

List系列的集合有:ArrayList不帶線程安全的數組集合 Vector帶線程安全的數組集合 Stack堆棧集合,Stack是繼承於Vector的子類  LinkedList雙鏈表集合

 

繼承示意圖:

41fcbc416b98653a39f0fe2ad7513780.png



Set系列裏沒有用下標進行操作的方法,而且方法也都是父類的,沒有自定義方法。因爲它是無序的,沒辦法拿到固定準確的下標

75d8e5923e2223c20f05dc4f23841acf.png



List系列則有用下標進行操作的方法,因爲是有序的,有固定準確的下標,想從哪個位置開始操作都可以,可以倒序操作也可以正序操作

039d176e216b93753b75308aab93df4a.png


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章