日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【转】HashSet的用法

發布時間:2025/3/15 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【转】HashSet的用法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

原文網址:http://blog.csdn.net/aidesudi/article/details/4720201

Java代碼
  • public?class?TestHashSet?{ ??
  • ??
  • ????public?static?void?main(String?[]?agrs){ ??
  • ????????Set?set?=?new?HashSet(); ??
  • ????????//添加一個string數據 ??
  • ????????set.add("文本"); ??
  • ????????//添加一個整數數據 ??
  • ????????set.add(new?Integer(5)); ??
  • ????????//添加一個付點數據 ??
  • ????????set.add(12.15); ??
  • ????????//輸出集合大小 ??
  • ????????System.out.println(set.size()); ??
  • ????????//在添加個相同的文本 ??
  • ????????set.add("文本"); ??
  • ????????//輸出大小 ??
  • ????????System.out.println(set.size()); ??
  • ????????//添加個null值 ??
  • ????????set.add(null); ??
  • ????????//輸出集合大小 ??
  • ????????System.out.println(set.size()); ??
  • ????????//再添加個null值 ??
  • ????????set.add(null); ??
  • ????????//輸出集合大小 ??
  • ????????System.out.println(set.size()); ??
  • ????????//判斷是否存在null值 ??
  • ????????System.out.println(set.contains(null)); ??
  • ????????//?刪除null值 ??
  • ????????set.remove(null); ??
  • ????????//判斷是否存在null值 ??
  • ????????System.out.println(set.contains(null)); ??
  • ????????//輸出集合大小 ??
  • ????????System.out.println(set.size()); ??
  • ???????? ??
  • ????????Set?set1?=?new?HashSet(); ??
  • ????????UserInfo?user?=?new?UserInfo("abc","123"); ??
  • ????????UserInfo?user1?=?new?UserInfo("abc","123"); ??
  • ????????set1.add(user); ??
  • ????????System.out.println(set1.size()); ??
  • ????????//判斷是否存在user1這個對象 ??
  • ????????System.out.println(set1.contains(user1)); ??
  • ????????user.setName("xyz"); ??
  • ????????user.setPassword("aaa"); ??
  • ????????//在更改了user值后user1還存在嗎? ??
  • ????????System.out.println(set1.contains(user1)); ??
  • ???????? ??
  • ????} ??
  • } ??
  • ??
  • public?class?UserInfo?{ ??
  • ????private?String?name; ??
  • ????private?String?password; ??
  • ????private?int?HASHCODE=?Integer.MIN_VALUE; ??
  • ???? ??
  • ????public?UserInfo(String?name,String?password){ ??
  • ????????this.name?=?name; ??
  • ????????this.password?=?password; ??
  • ????} ??
  • ????public?String?getName()?{ ??
  • ????????return?name; ??
  • ????} ??
  • ????public?void?setName(String?name)?{ ??
  • ????????this.name?=?name; ??
  • ????} ??
  • ????public?String?getPassword()?{ ??
  • ????????return?password; ??
  • ????} ??
  • ????public?void?setPassword(String?password)?{ ??
  • ????????this.password?=?password; ??
  • ????} ??
  • ???? ??
  • ????public?int?hashCode()?{? ??
  • ????????if?(HASHCODE?==?Integer.MIN_VALUE)?{? ??
  • ???????????//?重新生成本類的hashCode? ??
  • ??????????HASHCODE?=?name.hashCode()?+?password.hashCode();????? ??
  • ????????}? ??
  • ????????return?HASHCODE;? ??
  • ??????}? ??
  • ???? ??
  • ????//判斷值是否相等 ??
  • ????public?boolean?equals(Object?obj)?{ ??
  • ????????if(obj?==?null?||?!(obj??instanceof??UserInfo)){ ??
  • ????????????return?false; ??
  • ????????} ??
  • ????????UserInfo?user?=?(UserInfo)obj; ??
  • ????????return?this.name?==?user.name?&&?this.password?==??user.password; ??
  • ????} ??
  • } ??
  • 從上面的簡單添加,和輸出結果我想大家已經知道了set的一些用法和特性了。

    1.??? HashSet允許null值。

    2.???????HashSet中值不能重復。

    3.???????Hashset在判斷是否存在同一個對象的時候首先會判斷對象的hashcode是否相等,然后在判斷對象的equals()是否相等。當你向HashSet中存入重復元素時,他會按照正常的流程執行存入操作
    底層的數據結構采用的是數組+鏈表的存儲結構(明白這一點對于理解HashSet的原理非常重要),
    也就是說數組中的每一個元素都是一個鏈表(對應java中的List的某一具體實現),
    這樣當有元素要存入HashSet中時,便會首先通過hashCode()方法得到該對象的一個哈希碼,并利用該哈希碼通過一些轉換算法映射成數組的下標索引(當查找時也是如此,因此會非常的快),接下來便會判斷該下標處是否為null若為null則會創建一個列表,此時將待插入的對象直接插入,若列表已經存在則利用equals()方法將帶插入對象與列表中的元素逐個比較,相等則忽略,不存在相等元素則直接插入。
    因此不同對象的hashCode()是可以相同的(最好是均勻的散列開,這樣才能充分的提高訪問及插入的速度),
    根據equals()判定相等的對象所產生的hashCode()必須相等(根據其原理不難理解,否則的話便會有重復元素出現了)
    保證一點??hashCode()與equals()必須能夠唯一的確定一個對象。

    ?

    轉載于:https://www.cnblogs.com/wi100sh/p/4485508.html

    總結

    以上是生活随笔為你收集整理的【转】HashSet的用法的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。