大數據成神之路-Java高級特性加強(HashSet)

請戳GitHub原文: github.com/wangzhiwubi…git

大數據成神之路系列:

請戳GitHub原文: github.com/wangzhiwubi…github

Java高級特性加強-集合面試

Java高級特性加強-多線程bash

Java高級特性加強-Synchronized網絡

Java高級特性加強-volatile多線程

Java高級特性加強-併發集合框架架構

Java高級特性加強-分佈式併發

Java高級特性加強-Zookeeper框架

Java高級特性加強-JVM分佈式

Java高級特性加強-NIO

公衆號

  • 全網惟一一個從0開始幫助Java開發者轉作大數據領域的公衆號~

  • 公衆號大數據技術與架構或者搜索import_bigdata關注,大數據學習路線最新更新,已經有不少小夥伴加入了~

Java高級特性加強-集合框架(HashSet)

本部分網絡上有大量的資源能夠參考,在這裏作了部分整理,感謝前輩的付出,每節文章末尾有引用列表,源碼推薦看JDK1.8之後的版本,注意甄別~ ####多線程 ###集合框架 ###NIO ###Java併發容器


集合框架

Java中的集合框架

ArrayList/Vector LinkedList HashMap HashSet LinkedHashMap ... 本章內容參考引用網上的內容爲主,網上有大量優質的資源,做者在這裏作了整理以下:

HashSet

HashSet簡介

HashSet 是一個不容許存儲重複元素的集合,它的實現比較簡單,只要理解了 HashMap,HashSet就水到渠成了。

77c391135721e3ab98ac61791046d6bc.jpeg
從圖中能夠看出:

  1. HashSet繼承於AbstractSet,而且實現了Set接口。
  2. HashSet的本質是一個"沒有重複元素"的集合,它是經過HashMap實現的。HashSet中含有一個"HashMap類型的成員變量"map,HashSet的操做函數,實際上都是經過map實現的。
成員變量

首先了解下 HashSet 的成員變量:

private transient HashMap<E,Object> map;

    // Dummy value to associate with an Object in the backing Map
    private static final Object PRESENT = new Object();
複製代碼

發現主要就兩個變量:

map: 用於存放最終數據的。 PRESENT: 是全部寫入 map 的 value 值。

構造函數
public HashSet() {
        map = new HashMap<>();
    }

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

構造函數很簡單,利用了HashMap初始化了map。

add

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

比較關鍵的就是這個add()方法。能夠看出它是將存放的對象當作了HashMap 的健,value都是相同的PRESENT。因爲HashMap的key是不能重複的,因此每當有重複的值寫入到HashSet時,value會被覆蓋,但key不會受到影響,這樣就保證了HashSet中只能存放不重複的元素。 HashSet的原理比較簡單,幾乎所有藉助於HashMap來實現的。


參考書籍: 《Effective Java》

GitHub: github.com/wangzhiwubi…

關注公衆號,內推,面試,資源下載,關注更多大數據技術~
                   預計更新500+篇文章,已經更新50+篇~ 複製代碼
相關文章
相關標籤/搜索