更新時間:2022-11-01 來源:黑馬程序員 瀏覽量:
HashSet是Set接口中的一個實現(xiàn)類,它所存儲的元素是不可重復(fù)的,并且元素都是無序的。下面通過一個案例演示HashSet集合的用法,如文件6-7所示。
文件6-7 Example07.java
import java.util.*; public class Example07 { public static void main (String[] args) { Hash set = new HashSet (); // 創(chuàng)建HashSet集合 set.add("張三"); // 向該Set集合中添加字符串 set.add("李四"); set.add("王五"); set.add("李四"); // 向該Set集合中添加重復(fù)元素 Iterator it = set.iterator (); // 獲取Iterator對象 while (it.hasNext ()) { // 通過while循環(huán),判斷集合中是否有元素 Object obj = it.next (); // 如果有元素,就通過迭代器的next()方法獲取元素 System.out.println (obj); } } }
在文件6-7中,第4~8行代碼聲明了一個HashSet集合并通過add()方法向HashSet集合依次添加了4個字符串;第9行代碼聲明了一個迭代器對象it;第10~13行代碼是通過Iterator迭代器遍歷所有的元素并且輸出。從打印結(jié)果可以看出,取出元素的順序與添加元素的順序并不一致,并且重復(fù)存入的字符串對象“李四”被去除了,只添加了一次。
HashSet集合之所以能確保不出現(xiàn)重復(fù)元素,是因為它在存入元素時做了很多工作。當(dāng)調(diào)用HashSet集合的add()方法存入元素時,首先調(diào)用當(dāng)前存入對象的hashCode()方法獲得對象的散列值,然后根據(jù)對象的散列值計算出一個存儲位置。如果該位置上沒有元素,則直接將元素存入,如果該位置上有元素存在,則會調(diào)用equals()方法讓當(dāng)前存入的元素依次與該位置上的元素進(jìn)行比較,如果返回的結(jié)果為false就將該元素存入集合,返回的結(jié)果為true則說明有重復(fù)元素,將該元素舍棄。