1. 程式人生 > >35、Set介面,HashSet實現

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

//set  無序   沒有重複值

HashSet set=new HashSet();

set.add("王五");

set.add("劉寶");

set.add("張三");

set.add("李四");//注意放了多個李四的資料

set.add("李四");

set.add("李四");

set.add("李四");

System.out.println("大小:"+set.size());

//打印出所有的資料,發現和新增的順序不一致。

Iterator iterator2=set.iterator();

while (iterator2.hasNext()) {

Object object = (Object) iterator2.next();

System.out.println(object);

}  

程式輸出如下:

大小:4

張三

李四

劉寶

王五

由上面的輸出可知,我們雖然添加了很多個“李四”的資料,然而集合裡面只有四個資料,所以說Set中的資料是不可以有重複資料的。另外,通過迭代列印HashSet可以發現,物件儲存在集合中看上去是“無序”的。當然也可以覆蓋父類的hashcode方法,讓getHashCode方法返回一個偽hash值,這樣就可以控制排序。

★集合的可迭代(iterator)特性★

集合是物件的容器,在程式設計中使用集合,既要能夠把資料放進去,也得有方法把資料取回來。在容器中依次獲取全部物件的過程叫作迭代集合,java設計了迭代器Iterator介面定義了呼叫迭代的方法,其Iterator的實現類需要根據自身集合的特性完成相應的迭代演算法,演算法提供了一種列舉容器中每個物件(enumerating the contents of a collection)的方法。這裡列舉或迭代/遍歷都是同樣的意思。