HashSet檢索方法:
首先申請一個返回值爲boolean類型的方法參數類型依然爲Object,前面同樣的使用添加方法裏的判斷和計算傳進來對象的hash值。還需要判斷一下傳進來的值是否爲null,爲null的話就報空指針異常,因爲傳遞的值既然爲null肯定沒法進行其他的操作,直接報出異常讓方法結束:
如果傳進來的值不爲null,就聲明一個變量名爲hashcode的int類型變量,然後使用傳進來的對象調用hashCode方法獲取到這個對象的hash值,存儲到這個變量裏:
接着判斷一下這個得到的hash值是否爲負數,爲負數的話就要取反成正數,不然接下來無法得出數組下標,因爲都知道數組下標是沒有負數的:
確保得到的hash值是正數後,就申請一個變量名爲index的int類型變量,把hashcode取餘於數組的長度後得到數組的下標,儲存到變量中:
得到數組下標後,先判斷一下在數組裏的這個下標是否爲null,也就是看一下這裏面有沒有存儲到數據,如果爲null的話自然是什麼都沒有,所以就返回一個false出去:
經過判斷後不爲null就代表這個數組下標裏儲存着數據,有數據的話就申請一個Object數組把這裏面的數組先拿出來,因爲HashSet集合裏存儲值的時候是使用的單鏈,所以需要強制轉換成數組:
把數組拿出來後,先寫一個死循環來進行查找,直到找到才結束循環,所以先在循環裏判斷拿出來的值是否爲null,是的話就代表沒有,返回一個false,不爲null則使用這個數組裏存儲數據的下標來訪問equals方法判斷一下里面的對象內容是否爲傳進來的參數內容,是的話就返回一個true,如果沒通過判斷就進入else部分繼續往下找,直到滿足某一個判斷條件來結束方法:
代碼示例:
運行結果:
集合框架體系:
在集合框架體系中,Collection接口是整個集合框架中最高接口,裏面定製了集合最基本的所有方法。
Collection接口產生了兩個分支點,一個是Set接口,一個是List接口
Set系列的特點是散開的,無序的,不能夠添加重複值的。Set系列的優點是查找速度快,缺點是添加速度慢,所以適合用於檢索量大的事情
List系列的特點是有序的,可以添加重複值的。它的優點是添加的速度快,缺點是查找的速度慢。所以適合用於添加大量數組的事情上
Set系列的集合有:HashSet是無序的,hash值結構集合 TreeSet排序的,二叉樹結構集合
List系列的集合有:ArrayList不帶線程安全的數組集合 Vector帶線程安全的數組集合 Stack堆棧集合,Stack是繼承於Vector的子類 LinkedList雙鏈表集合
Set系列裏沒有用下標進行操作的方法,而且方法也都是父類的,沒有自定義方法。因爲它是無序的,沒辦法拿到固定準確的下標
List系列則有用下標進行操作的方法,因爲是有序的,有固定準確的下標,想從哪個位置開始操作都可以,可以倒序操作也可以正序操作