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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

hashset java 键值对_Java集合 - HashSet的定义以及用法

發布時間:2025/3/12 java 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 hashset java 键值对_Java集合 - HashSet的定义以及用法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

HashSet的定義

HashSet類實現了Set接口,由一個實際上是HashMap實例的散列表?支持。不能保證該集合的迭代次序,這意味著該類不能保證元素隨時間的不變順序。這個類允許null元素。該類還為基本操作(如添加,刪除,包含和大小)提供了恒定的時間性能,假定散列函數將元素正確地分散到桶中,我們將在文章中進一步討論。
HashSet的一些重要特性是:

  • 實現Set Interface。
  • HashSet的基礎數據結構是散列表。
  • 由于它實現了Set Interface,所以不允許重復值。
  • 您在HashSet中插入的對象不保證以相同順序插入。對象基于其哈希碼插入。
  • HashSet中允許使用NULL元素。
  • HashSet還實現了Searlizable和Cloneable接口。

現在為了維持恒定的時間性能,迭代HashSet需要的時間與HashSet實例的大小(元素數量)加上支持HashMap實例的“容量”(桶的數量)的總和成正比。因此,如果迭代性能很重要,不要將初始容量設置得太高(或者負載因子太低)是非常重要的。

初始容量:初始容量意味著在創建散列表(HashSet內部使用散列表數據結構)時創建桶的數量。如果當前尺寸變滿,桶的數量將自動增加。負載因數:負載因數是衡量HashSet在其容量自動增加之前能夠獲得的滿量程。當哈希表中的條目數量超過負載因子和當前容量的乘積時,散列表就會被重新映射(即重建內部數據結構),以便散列表大約是存儲桶數量的兩倍。

表格中存儲的元素數量 加載因子= -----------------------------------------????????????????????????散列表的大小?

示例:如果內部容量為16并且加載因子為0.75,那么當表中有12個元素時,桶的數量會自動增加。

對性能的影響:
負載因子和初始容量是影響HashSet操作性能的兩個主要因素。0.75的負載因子在時間和空間復雜度方面提供了非常有效的性能。如果我們將負載因子值增加得超過這個值,那么內存開銷將會減少(因為它會減少內部重建操作),但是它會影響哈希表中的添加和搜索操作。為了減少重新哈希操作,我們應該明智地選擇初始容量。如果初始容量大于最大入口數量除以負載因子,則不會發生重新刷新操作。

注:HashSet中的實現不同步,因為如果多個線程同時訪問散列集,并且至少有一個線程修改了該集,它必須在外部同步。這通常是通過在自然封裝集合的某個對象上進行同步來完成的。如果不存在這樣的對象,則應該使用Collections.synchronizedSet方法來“包裝”該集合。這最好在創建時完成,以防止意外的不同步訪問集合,如下所示:

Set s = Collections.synchronizedSet(new HashSet(...));

HashSet中的構造函數:

  • HashSet h = new HashSet();
    默認初始容量為16,默認加載因子為0.75。
  • HashSet h = new HashSet(int initialCapacity);
    默認的0.75的loadFactor
  • HashSet h = new HashSet(int initialCapacity,float loadFactor);
  • HashSet h = new HashSet(Collection C);
  • 下面的程序說明了HashSet的幾個基本操作:

    // Java program to demonstrate working of HashSet

    import java.util.*;

    class Test

    {

    public static void main(String[]args)

    {

    HashSet h = new HashSet();

    // Adding elements into HashSet usind add()

    h.add("India");

    h.add("Australia");

    h.add("South Africa");

    h.add("India");// adding duplicate elements

    // Displaying the HashSet

    System.out.println(h);

    System.out.println("List contains India or not:" +

    h.contains("India"));

    // Removing items from HashSet using remove()

    h.remove("Australia");

    System.out.println("List after removing Australia:"+h);

    // Iterating over hash set items

    System.out.println("Iterating over list:");

    Iterator i = h.iterator();

    while (i.hasNext())

    System.out.println(i.next());

    }

    }

    輸出:

    [South Africa, Australia, India]List contains India or not:trueList after removing Australia:[South Africa, India]Iterating over list:South AfricaIndia

    HashSet的內部工作
    由Map內部備份的所有Set接口類。HashSet使用HashMap在內部存儲它的對象。您一定想知道,要在HashMap中輸入值,我們需要一個鍵值對,但在HashSet中,我們只傳遞一個值。

    存儲在HashMap中
    實際上,我們在HashSet中插入的值作為映射對象的關鍵字,并且其值java使用常量變量。所以在鍵值對中,所有鍵都具有相同的值。

    在java文檔中實現HashSet

    private transient HashMap map;//構造函數 - 1//所有的構造函數都在內部創建HashMap對象。public HashSet(){ //創建內部支持HashMap對象 map = new HashMap();}//構造函數 - 2public HashSet(int initialCapacity){ //創建內部支持HashMap對象 map = new HashMap(initialCapacity);}//與map中的對象關聯的虛擬值private static final Object PRESENT = new Object();

    如果我們看一下HashSet類的add()方法:

    public boolean add(E e){ return map.put(e,PRESENT)== null;}

    我們可以注意到,HashSet類的add()方法通過傳遞指定的元素作為鍵和常量“PRESENT”作為其值,來內部調用支持HashMap對象的put()方法。

    remove()方法也以相同的方式工作。它內部調用Map接口的remove方法。

    public boolean remove(Object o){??return map.remove(o)== PRESENT;}

    HashSet操作的時間復雜度:HashSet的基礎數據結構是散列表。因此,對于添加,移除和查找(包含方法)操作,HashSet需要O(1)次的時間復雜度(平均或通常情況下)的時間復雜度。

    HashSet中的方法:

  • boolean add(E e):用于添加指定元素(如果不存在),如果存在則返回false。
  • void clear():用于刪除set中的所有元素。
  • boolean contains(Object o): 如果元素存在于set中,則返回true。
  • boolean remove(Object o):用于刪除元素,如果它存在于set中。
  • Iterator iterator(): 用于返回集合中元素的迭代器。
  • boolean isEmpty():用于檢查集合是否為空。返回true表示空,false表示非空條件。
  • int size():用于返回集合的大小。
  • Object clone():用于創建集合的淺表副本。
  • --------------------------------------------------------

    轉載自:https://www.breakyizhan.com/java/4658.html

    總結

    以上是生活随笔為你收集整理的hashset java 键值对_Java集合 - HashSet的定义以及用法的全部內容,希望文章能夠幫你解決所遇到的問題。

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