第三次学JAVA再学不好就吃翔(part89)--HashSet
生活随笔
收集整理的這篇文章主要介紹了
第三次学JAVA再学不好就吃翔(part89)--HashSet
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
學習筆記,僅供參考,有錯必糾
HashSet
HashSet實現了Set接口,由哈希表(實際上是一個 HashMap 實例)支持。它不保證 set 的迭代順序;特別是它不保證該順序恒久不變。此類允許使用 null 元素。
HashSet存儲字符串并遍歷
package com.guiyang.object; import java.util.HashSet;public class Demo1_HashSet {public static void main(String[] args) {HashSet<String> hs = new HashSet<>();boolean b1 = hs.add("a");hs.add("b");boolean b2 = hs.add("a");//向Set集合中存儲重復元素將返回Falsehs.add("110");hs.add("120");hs.add("130");System.out.println(b1);System.out.println(b2);System.out.println(hs);for (String string : hs) {System.out.println(string);}} }
輸出:
true false [110, a, b, 130, 120] 110 a b 130 120由以上的運行結果,我們可以發現Set集合有:無索引,不可重復,存取不一致的特點。且它重寫了toString方法。
HashSet保證元素唯一性原理
- HashSet原理
- 我們使用Set集合的目的是為了去掉重復元素, 如果在存儲時逐個調用equals()方法進行比較, 那么存儲效率會很低,而哈希算法則提高了去重復的效率, 降低了使用equals()方法的次數;
- 當HashSet調用add()方法存儲對象的時候, 先調用對象的hashCode()方法得到一個哈希值, 然后在集合中查找是否有哈希值相同的對象:
- 如果沒有哈希值相同的對象就直接存入集合;
- 如果有哈希值相同的對象, 就和哈希值相同的對象逐個進行equals()比較,比較結果為false就存入, true則不存儲。
- 將自定義類的對象存入HashSet去重復
- 類中必須重寫hashCode()和equals()方法;
- hashCode():屬性相同的對象返回值一定相同, 屬性不同的返回值很可能不同(提高效率);
- equals(): 屬性相同返回true, 屬性不同返回false,返回值為false時,存儲該對象。
LinkedHashSet
具有可預知迭代順序的 Set 接口的哈希表和鏈接列表實現。此實現與 HashSet 的不同之外在于,后者維護著一個運行于所有條目的雙重鏈接列表。此鏈接列表定義了迭代順序,即按照將元素插入到 set 中的順序(插入順序)進行迭代。
簡而言之,就是既保證元素唯一性,也保證元素存儲順序。
- 舉個例子
輸出:
[a, b, c, d]總結
以上是生活随笔為你收集整理的第三次学JAVA再学不好就吃翔(part89)--HashSet的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 饥饿鲨世界机器人在哪
- 下一篇: 刺客信条奥德赛家庭线结局达成攻略