|NO.Z.00059|——————————|BigDataEnd|——|Java&集合類庫.V07|----------------------------------------------|Java.v07|HashSet集合|
阿新 • • 發佈:2022-04-04
[BigDataJava:Java&集合類庫.V07] [BigDataJava.核心類庫] [|章節五|集合類庫|HashSet集合|]
一、HashSet集合的程式設計使用
### --- 常用的方法
——> 參考Collection集合中的方法即可!
### --- 案例題目 ——> 準備一個Set集合指向HashSet物件,向該集合中新增元素"two"並列印, ——> 再向集合中新增元素"one"並列印,再向集合中新增元素"three"並列印, ——> 再向集合中新增"one"並列印。
### --- 元素放入HashSet集合的原理 ——> 使用元素呼叫hashCode方法獲取對應的雜湊碼值, ——> 再由某種雜湊演算法計算出該元素在陣列中的索引位置。 ——> 若該位置沒有元素,則將該元素直接放入即可。 ——> 若該位置有元素,則使用新元素與已有元素依次比較雜湊值, ——> 若雜湊值不相同,則將該元素直接放入。 ——> 若新元素與已有元素的雜湊值相同,則使用新元素呼叫equals方法與已有元素依次比較。 ——> 若相等則新增元素失敗,否則將元素直接放入即可。 ——> 思考:為什麼要求重寫equals方法後要重寫hashCode方法呢?
### --- 解析:
——> 當兩個元素呼叫equals方法相等時證明這兩個元素相同,
——> 重寫hashCode方法後保證這兩個元素得到的雜湊碼值相同,
——> 由同一個雜湊演算法生成的索引位置相同,
——> 此時只需要與該索引位置已有元素比較即可,從而提高效率並避免重複元素的出現。
二、元素放入雜湊表的過程
三、程式設計使用
四、程式設計列印package com.yanqi.task15; import java.util.HashSet; import java.util.LinkedHashSet; import java.util.Set; public class HashSetTest { public static void main(String[] args) { // 1.宣告一個Set型別的引用指向HashSet型別的物件 Set<String> s1 = new HashSet<>(); //Set<String> s1 = new LinkedHashSet<>(); // 將放入的元素使用雙鏈表連線起來 System.out.println("s1 = " + s1); // [啥也沒有] System.out.println("----------------------------------------------------"); // 2.向集合中新增元素並列印 boolean b1 = s1.add("two"); System.out.println("b1 = " + b1); // true System.out.println("s1 = " + s1); // [two] // 從列印結果上可以看到元素沒有先後放入次序(表面) b1 = s1.add("one"); System.out.println("b1 = " + b1); // true System.out.println("s1 = " + s1); // [one, two] [two, one] b1 = s1.add("three"); System.out.println("b1 = " + b1); // true System.out.println("s1 = " + s1); // [one, two, three] [two, one, three] // 驗證元素不能重複 b1 = s1.add("one"); System.out.println("b1 = " + b1); // false System.out.println("s1 = " + s1); // [one, two, three] [two, one, three] } }
D:\JAVA\jdk-11.0.2\bin\java.exe "-javaagent:D:\IntelliJIDEA\IntelliJ IDEA 2019.3.3\lib\idea_rt.jar=53231:D:\IntelliJIDEA\IntelliJ IDEA 2019.3.3\bin" -Dfile.encoding=UTF-8 -classpath E:\NO.Z.10000——javaproject\NO.H.00001.javase\javase\out\production\javase com.yanqi.task15.HashSetTest
s1 = []
----------------------------------------------------
b1 = true
s1 = [two]
b1 = true
s1 = [one, two]
b1 = true
s1 = [one, two, three]
b1 = false
s1 = [one, two, three]
Process finished with exit code 0
===============================END===============================
Walter Savage Landor:strove with none,for none was worth my strife.Nature I loved and, next to Nature, Art:I warm'd both hands before the fire of life.It sinks, and I am ready to depart ——W.S.Landor
來自為知筆記(Wiz)