35、Set介面,HashSet實現
學習目標:
1、瞭解Java的歷史
2、為什麼要學習Java語言
3、端正學習態度
學習過程:
一、Set介面介紹
Set與離散數學中的一個“集合”概念類似,集合的特點是無序的和不允許有重複的資料,在java程式設計中的所謂重複資料是指使用Object的equals()方法進行比較返回true時的兩個物件,Set中的順序也是按照java自己的排序方式與使用者放置資料的先後順序無關,所以我們也可以理解為是“無序”的。在Set中可以放入空值,但同理也只能放一個null 元素。
常用的Set實現類有HashSet、HashTable和TreeSet。
二、HashSet介紹
1、HashSet介紹
HashSet實現了Set介面,同時繼承於AbstractSet類。HashSet對每個物件採用雜湊雜湊碼hashcode進行儲存索引,雜湊雜湊碼hashcode由程式在新增時才生成,每個物件之間沒有關係,這樣在HashSet中進行新增、刪除物件或者比較物件,以及隨機讀取一個物件等操作時執行的時間是一致,不會因為物件資料量的多少的變化影響效能,在很多需要效能而無關順序的環境下HashSet是一個非常好的選擇。
構造方法有4個過載:
HashSet( ); //建立一個預設的雜湊集合。
HashSet(Collection c); //用c中的元素初始化雜湊集合。
HashSet(int capacity); //建立一個容量為capacity的雜湊集合。
HashSet(int capacity, float fillRatio);//建立一個容量為capacity的雜湊集合,並指定容量填充比
填充比是一個範圍在0.0與1.0之間浮點數,它決定容器中的元素的個數與容器容量比值大於指定的填充比時,雜湊集合容量會自動擴容。對於沒有獲得填充比的建構函式,預設使用0.75。
常用普通方法
add(Object o)
size()
2、HashSet示例
程式碼:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
|
程式輸出如下:
大小:4
張三
李四
劉寶
王五
由上面的輸出可知,我們雖然添加了很多個“李四”的資料,然而集合裡面只有四個資料,所以說Set中的資料是不可以有重複資料的。另外,通過迭代列印HashSet可以發現,物件儲存在集合中看上去是“無序”的。當然也可以覆蓋父類的hashcode方法,讓getHashCode方法返回一個偽hash值,這樣就可以控制排序。
★集合的可迭代(iterator)特性★
集合是物件的容器,在程式設計中使用集合,既要能夠把資料放進去,也得有方法把資料取回來。在容器中依次獲取全部物件的過程叫作迭代集合,java設計了迭代器Iterator介面定義了呼叫迭代的方法,其Iterator的實現類需要根據自身集合的特性完成相應的迭代演算法,演算法提供了一種列舉容器中每個物件(enumerating the contents of a collection)的方法。這裡列舉或迭代/遍歷都是同樣的意思。