Set HashSet TreeSet原理和特點

2021-09-28 23:51:01 字數 2017 閱讀 8168

------------| collection 單列集合的根介面

-----------------| list 實現了list介面的結合類,具備的特點:有序,可重複

---------------------- | arraylist arraylist底層是維護了乙個object陣列來實現的,特點:查詢速度快、增刪慢。

---------------------- | linkedlist linkedlist底層是使用了鍊錶資料結構實現的。特點:查詢速度慢,增刪快。

---------------------- | vector vector類可以實現可增長的物件陣列,底層也是維護了乙個object陣列。

-----------------| set 實現了set介面的集合類,具備的特點:無序,不可重複

---------------------- | hashset 底層是使用了雜湊表來支援的,特點:訪問速度快。

---------------------- | treeset 如果元素具備自然順序的特性,那麼會按照元素自然順序的特性進行排序儲存。

繼承了collection的方法,沒有特殊的方法。

add()、clear()、clone()、contains()、isempty()、iterator()、remove()、size()

也沒有特殊的方法。

hashset的實現原理:

往hashset新增元素的時候,hashset會先呼叫元素的hashcode方法得到元素的雜湊值,然後通過元素的雜湊值經過移位等運算,就可以算出該元素在雜湊表中的儲存位置(注:雜湊表的儲存位置與記憶體位址區分開)。

情況1:如果算出的元素儲存的位置目前沒有任何元素儲存,那麼該元素可以直接到該位置上。

情況2:如果算出該元素的儲存位置目前已經存在有其他的元素了,那麼會呼叫該元素的equals方法(比較的記憶體位址)與該位置上的元素在比較一次,如果equals返回的是true,那麼該元素與這個位置上的元素就視為重複元素,不允許新增,如果equals方法返回的是false,那麼該元素執行新增。

如果元素具備自然順序的特性,那麼會按照元素自然順序的特性自動進行排序儲存。

如果新增了沒有可比性的元素會報錯,因為treeset會自動幫我們排序。

treeset要注意的事項:

1、往treeset新增元素的時候,如果元素本身具備了自然順序的特性,那麼就按照元素自然順序的特性進行排序儲存。

2、往treeset新增元素的時候,如果元素本身不具備自然順序的特性,那麼該元素的類必須要實現comparable介面,把元素的比較規則定義在compareto(t o)方法上。

元素與元素之間的比較規則:compareto(t o)方法返回負整數、零或正整數,表示此物件是小於、等於還是大於指定物件。

3、如果比較元素的時候,compareto(t o)方法返回的是0,那麼該元素就被視為重複元素,不允許新增。(注意:treeset與hashcode、equals方法是沒有任何關係的。)

4、往treeset新增元素的時候,如果元素本身沒有具備自然順序的特性,而元素所屬的類也沒有實現omparable介面,那麼必須要在建立treeset的時候傳入乙個比較器。

如何自定義乙個比較器:自定義乙個類實現comparator介面即可,把元素與元素之間的規則定義在compare方法內即可。

自定義比較器的格式:

class 類名 implements comparator{

5、往treeset新增元素的時候,如果元素本身不具備自然順序的特性,而元素所屬的類已經實現了comparable介面,再建立treeset物件的時候也傳入了比較器,那麼是以比較器的比較規則優先使用。

treeset的儲存原理:

底層是使用紅黑樹數(二叉樹)據結構實現的

treeset是可以對字串進行排序的,因為字串已經實現了comparable介面。

字串的比較規則:

情況一:可以找到對應不同的字元,比較的就是對應位置上的字元。

情況二:找不到對應不同的字元,比較的就是字串的長度。

希爾伯特變換求包絡原理

我們設x t 的傅利葉變換為x jw 用 w代替w,可得 即x t 的傅利葉變換為x jw 若x t 為實訊號,則x t x t 兩邊經過傅利葉變換後可得x jw x jw 實訊號的傅利葉變換包含負頻率,若想去掉負頻率但總功率又保持不變,則令 u t 為階躍函式,為了寫的方便把j去掉了 經過傅利葉反...

曼切斯特編碼和差分曼切斯特編碼

每一位由兩個高低位來表示,標準曼切斯特編碼中由高到低表示1,低到高表示0 即標準曼切斯特編碼中的10表示1,01表示0 例如1011001的圖可以這麼畫 編碼的程式可以這麼寫 def manchester0 str flag for i in range 0 len str 2 flag str i...

川普將於下月推出真相社交App 和推特類似

程式設計客棧 www.cppcns.com 1月wzzsspyhix7日 訊息 川普要推屬於自己的 推特 了?近日,蘋果的app store列表顯示,美國前 川普的新程式設計客棧 公司計畫於 2 月 21 日推出其社交 應用 真相社交 truth social 真相社交是川普 和科技集團 tmtg ...