Set介面
1、特點
元素不能重復,無序,Set介面中的方法和collection的方法一樣
HashSet:內部實際結構是哈希表,是不同步的,
哈希表:將物件經過哈希演算法計算成該物件的哈希值,并把哈希值存放在哈希表中,其實哈希值就相當于陣列中的角標,所以在查找的時候直接根據哈希值查詢,速度很快,
哈希表確定元素是否相同
u 判斷的是兩個元素的哈希值是否相同,如果相同,再判斷兩個物件的內容是否相同
u 判斷哈希值相同,其實判斷的是物件的hashcode的方法,判斷內容相同,用的是equlas方法
注意:如果哈希值不同,是不用判斷equals.
Hahset集合資料是哈希表,所以存盤元素的時候,使用的元素的hashcode方法來確定位置,如果位置相同,在通過元素的equals來確定是否相同,也就是通過物件的hashcode和equals方法來完成物件唯一性的,如果物件的hashcode值不同,那么不用判斷equals方法,就直接存盤到哈希表中,如果物件的hashcode值相同,那么要再次判斷物件的equals 方法是否為true,如果為true,視為相同元素,不存,如果為false,那么視為不同元素,就進行存盤,
記住:如果元素要存盤到hashset集合中,必須覆寫hashcode方法和equals方法,一般情況下,如果定義的類會產生很多物件,比如人,學生,數,通常都需要覆寫equlas,hashcode方法,建立物件判斷是否相同的依據,
TreeSet:可以對集合中的元素進行排序,是不不同步的,
判斷元素唯一性的方式:即使根據比較方法的回傳結果是否是0,是0,就是相同的元素,不存,
u Treeset對元素進行排序的方式一:
讓元素自身具備比較功能,就需要實作comparable介面,覆寫comparaTo( )方法,如果不要按照物件中具備的自然順序進行排序,如果物件中不具備自然順序,怎么辦?
u 可以使用treeset集合第二種排序方式二:
讓集合自身比較功能,定義一個類實作comparator介面,覆寫compare方法,將該類物件作為引數傳遞給treeset集合的建構式,
2、集合的使用技巧
同步與非同步:
明確具體集合物件名稱的后綴,如果后綴是List都所屬于List體系,通常是非同步的,如果后綴是Set都所屬set體系,通常是非同步的;這些體系的其他子類物件,后綴不是所屬介面名的,一般都是同步的,如vector
資料結構:
前綴是資料結構,后綴是所屬體系,
ArrayList:看到Array,明確是陣列結構,查詢快,
需要唯一嗎?
需要:set
需要制定順序嗎:
需要:TreeSet
不需要:hashset
但是想要一個和存盤一致的順序(有序):linkedhashset
不需要:list
選要頻繁增刪嗎:
需要:linkedlist
不需要:arraylist
如果記錄每一個容器的結構和所屬體系呢?
看名字!
List
Arraylist
Linkedlist
Set
Hashset
Treeset
后綴名就是該集合所屬的體系,
前綴名就是該集合的資料結構,
看到array:就要想到陣列,就要想到查詢快,有角標,
看到link:就要想到鏈表,就要想到增刪快,就要想到 add get remove+first last的方法,
看到hash:就要想到哈希表,就要想到唯一性,就要想到hashcode和equals
看到tree:就要想到排序,想到二叉樹,就要想到comparable和comparator
通常這些常用的是執行緒不安全的,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/59811.html
標籤:Java
