簡體   English   中英

HashSet按升序給出輸出

[英]HashSet giving the output in ascending order

  import java.util.Iterator;
  import java.util.*;
  public class HashSetDemo
  {
  public static void main(String[] args)
  {
  HashSet<Integer> intSet = new HashSet<Integer>();
  intSet.add(2);
  intSet.add(7);
  intSet.add(7);
  intSet.add(3);
  intSet.add(4);
  intSet.add(9);
  intSet.add(1);
  intSet.add(13);
  System.out.println(intSet);
  intSet.remove(1);
  System.out.println(intSet);

我已經編寫了上面的代碼來實現HashSet,但是當我運行它時,我總是得到升序的輸出。 我不明白為什么會發生這種情況,因為HashSet不能對元素進行排序。

HashSet不保證集合的迭代順序。 特別是,它不能保證訂單會隨着時間的推移保持恆定

HashSet JavaDoc中

請注意, HashSet絕不會以任何特定順序返回您的值。

您必須使用TreeSet (或其他某種SortedSet )來實現排序的迭代。

哈希集不保證元素的順序。 但是它計算其中的對象的哈希碼。 因為整數可能會給出順序的哈希碼(直到達到最大容量),您可能會遇到它

哈希集包含一系列存儲桶。 根據源代碼的初始容量為16:

static final int DEFAULT_INITIAL_CAPACITY = 16;

因此,當您嘗試使用小整數時,它們會按順序放置

不能保證設置這些值並進行測試。

  intSet.add(21);
  intSet.add(22);
  intSet.add(7);
  intSet.add(3);
  intSet.add(4);
  intSet.add(9);
  intSet.add(1);
  intSet.add(13);

因為從概念上講,集合沒有任何順序。 如果集合明確是列表,樹等,則存在特定的順序。 如果您從上面的代碼中看到特定順序,則該順序特定於實現和值。

根據HashSet的文檔:

它不保證集合的迭代順序。 特別是,它不能保證順序會隨着時間的推移保持恆定。

並且,它也不能保證迭代順序永遠不會恆定。 您可以獲取迭代順序。 僅供參考,在我的系統上,每次執行的迭代順序都在變化。

隨着時間的推移添加和刪除元素,迭代順序可能會更改。 您永遠不應該依賴Hashset的迭代順序,因為它“不能保證迭代順序”,盡管在實踐中,如果使用默認構造函數創建新的Hashset並添加相同的元素,則最終得到相同的迭代訂購。

根據哈希集的Java API文檔。

Set不會檢索元素的Order。

由於您已經在HashSet中輸入了元素,並且它可以按任何順序返回,這可能是因為它每次都占用不同的順序。

Set的行為,尤其是Hashset,取決於您添加到Set中的每個對象的Hashcode。

因此,如果過一會兒運行該程序,它可能會顯示相同或不同的順序。 如果未按順序顯示任何更改,則可能采用該哈希碼。 操縱哈希碼不在我們(開發人員)手中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM