首先介紹一下HashSet接口
java.util.Set接口 extends Collection接口
一個不包含重複元素的 collection
HashSet不包含帶索引的方法
HashSet是一個哈希表結構,查詢速度非常快,是一個無序集合,此實作不是同步的,意思就是多線程
HashSet會自動排序
順帶着說一下哈希值
哈希值是一個十進制的整數,由系統随機給出(就是對象的位址值,是一個邏輯值,是模拟出來的位址,并不是資料實際儲存的 實體位址)
在Object類中有一個方法,可以擷取對象的哈希值
int hashCode() 傳回對象的哈希碼值
public native int hashCode();
native :代表該方法調用的是本地作業系統的方法
哈希表結構是HashSet結合儲存資料的結構
哈希表結構儲存資料如下圖

代碼分别用HashSet和LinkedHashSet向集合中添加元素并進行輸出對比
package com.qy.ds.Demo2;
import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedHashSet;
public class Demo05LinkedHashSet {
public static void main(String[] args) {
HashSet<String> hss = new HashSet<>();
hss.add("Hello");
hss.add("World");
hss.add("abc");
hss.add("abc");
Iterator<String> is = hss.iterator();
while (is.hasNext()){
System.out.println(is.next());
}
System.out.println("上邊是HashSet集合");
System.out.println("*********************");
System.out.println("下邊是LinkedHashSet集合");
LinkedHashSet<String> linkedHashSet = new LinkedHashSet<>();
linkedHashSet.add("Hello");
linkedHashSet.add("World");
linkedHashSet.add("abc");
linkedHashSet.add("abc");
Iterator<String> il = linkedHashSet.iterator();
while (il.hasNext()){
System.out.println(il.next());
}
}
}
讓我們看一下輸出結果
abc
Hello
World
上邊是HashSet集合
*********************
下邊是LinkedHashSet集合
Hello
World
abc
很明顯HashSet集合輸入的資料,在輸出時順序改變了,而LinkedHashSet,隻是去掉了重複元素,其他元素和輸入時的順序相同。
LinkedHashSet
可以使存放到集合中的元素有序,HashSet保證元素唯一,但元素放進去是沒有順序的
LinkedHashset 是由連結清單和哈希表(由數組+連結清單/紅黑樹)組成的一個資料儲存結構
這裡說的HashS是無序的 意思是存和取得順序不一樣 就是無序
而LinkedHashSet 存和取得順序一樣,稱之為有序,且LinkedHashSet同樣要争元素的唯一性,不允許存放重複元素