1. 程式人生 > 其它 >|NO.Z.00059|——————————|BigDataEnd|——|Java&集合類庫.V07|----------------------------------------------|Java.v07|HashSet集合|

|NO.Z.00059|——————————|BigDataEnd|——|Java&集合類庫.V07|----------------------------------------------|Java.v07|HashSet集合|



[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)