java集合之hashset


1.HashSet是什么?有什么特點

  HashSet是Set接口典型實現,它按照Hash算法來存儲集合中的元素,具有很好的存取和查找性能。主要具有以下特點:

    • 不保證set的迭代順序
    • HashSet不是同步的,如果多個線程同時訪問一個HashSet,要通過代碼來保證其同步
    • 集合元素值可以是null

  當向HashSet集合中存入一個元素時,HashSet會調用該對象的hashCode()方法來得到該對象的hashCode值,然后根據該值確定對象在HashSet中的存儲位置。

  在Hash集合中,不能同時存放兩個相等的元素,而判斷兩個元素相等的標准是兩個對象通過equals方法比較相等並且兩個對象的HashCode方法返回值也相等。

2.HashSet源碼分析

  public HashSet() {
        map = new HashMap<>();
    }

  
    public HashSet(Collection<? extends E> c) {
        map = new HashMap<>(Math.max((int) (c.size()/.75f) + 1, 16));
        addAll(c);
    }

  
    public HashSet(int initialCapacity, float loadFactor) {
        map = new HashMap<>(initialCapacity, loadFactor);
    }

  
    public HashSet(int initialCapacity) {
        map = new HashMap<>(initialCapacity);
    }

   
    HashSet(int initialCapacity, float loadFactor, boolean dummy)       {
        map = new LinkedHashMap<>(initialCapacity, loadFactor);
    }

可以看到hashset的構造其實就是一個hashMap..

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

看下add方法。

其實就是map放入一個key,value為null的鍵值對。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM