<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                ### 概述 此類實現Set接口,由哈希表支持(實際上是一個 HashMap集合)。HashSet集合不能保證的迭代順序與元素存儲順序相同 . 哈希表是單向鏈 . HashSet集合,采用哈希表結構存儲數據,保證元素唯一性的方式依賴于:hashCode()與equals()方法。 ### 實例 ~~~ HashSet<String> set = new HashSet<String>(); set.add("我"); set.add("愛"); set.add("你"); Iterator<String> it = set.iterator(); while(it.hasNext()){ System.out.println(it.next()); } ~~~ 結果 ~~~ 你 我 愛 ~~~ ### 數據結構 哈希表底層使用的也是數組機制,數組中也存放對象,而這些對象往數組中存放時的位置比較特殊,當需要把這些對象給數組中存放時,那么會根據這些對象的特有數據結合相應的算法,計算出這個對象在數組中的位置,然后把這個對象存放在數組中。而這樣的數組就稱為哈希數組,即就是哈希表。 當向哈希表中存放元素時,需要根據元素的特有數據結合相應的算法,這個算法其實就是Object類中的hashCode方法。由于任何對象都是Object類的子類,所以任何對象有擁有這個方法。即就是在給哈希表中存放對象時,會調用對象的hashCode方法,算出對象在表中的存放位置,這里需要注意,如果兩個對象hashCode方法算出結果一樣,這樣現象稱為哈希沖突,這時會調用對象的equals方法,比較這兩個對象是不是同一個對象,如果equals方法返回的是true,那么就不會把第二個對象存放在哈希表中,如果返回的是false,就會把這個值存放在哈希表中。 總結:保證HashSet集合元素的唯一,其實就是根據對象的hashCode和equals方法來決定的。如果我們往集合中存放自定義的對象,那么保證其唯一,就必須復寫hashCode和equals方法建立屬于當前對象的比較方式。 ![](https://box.kancloud.cn/7bc010e5d54296f10d7cdfbc7d8f7794_1260x590.png) ### 說明 它是線程不安全的 . HashSet初始容量是16 . 加載因子是0.75 . 如果容量超過16 ,name就會生成新的數組,并和原有的HashSet進行復制 . 這樣就會降低性能 . ### 字符串對象的哈希值 對象的哈希值,是一個十進制的整數 . 是父類Object去完成的 ,是一個本地方法 . 如果我們不重寫父類方法,每次運行**結果是不同的十進制整數值** . 哈希值是存儲到HashSet集合的依據 . ~~~ String s1 = new String("abc"); String s2 = new String("abc"); System.out.println(s1.hashCode()); System.out.println(s2.hashCode()); //哈希值是一致的 ~~~ 兩個對象的內存地址是不一致的,但是哈希值是一致的,為什么呢 ? 因為String類重寫了父類的方法, 它有自己計算哈希值的方式 . ### 哈希表的存儲過程 ~~~ HashSet<String> set = new HashSet<String>(); set.add(new String("hello world")); set.add(new String("hello world")); set.add(new String("happy")); set.add(new String("happy")); System.out.println(set.toString()); ~~~ 結果 ~~~ [happy, hello world] ~~~ 1. 調用每個存儲對象的哈希值 . 2. 集合在容器內尋找有沒有相同的哈希值對象 . 3. 如果找到有相同哈希值的對象, 將后放入集合的的對象調用equals()方法和第一個進行比較 . 4. 如果兩個對象,哈希值一致,equals()方法返回值是true , 集合判斷元素已經重復 . 5. 對于判定元素不重復的存儲方式是讓前一個對象記住后一個對象的內存地址, 和桶狀類似 . 6. 簡單說HashSet只能存放不同元素的機制就是先比較哈希值,再比較元素內容是否相等 . ### 哈希表存儲自定義對象
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看