請戳GitHub原文: github.com/wangzhiwubi…git
請戳GitHub原文: github.com/wangzhiwubi…github
Java高級特性加強-多線程bash
全網惟一一個從0開始幫助Java開發者轉作大數據領域的公衆號~
公衆號大數據技術與架構或者搜索import_bigdata關注,大數據學習路線最新更新,已經有不少小夥伴加入了~
本部分網絡上有大量的資源能夠參考,在這裏作了部分整理,感謝前輩的付出,每節文章末尾有引用列表,源碼推薦看JDK1.8之後的版本,注意甄別~ ####多線程 ###集合框架 ###NIO ###Java併發容器
ArrayList/Vector LinkedList HashMap HashSet LinkedHashMap ... 本章內容參考引用網上的內容爲主,網上有大量優質的資源,做者在這裏作了整理以下:
HashSet 是一個不容許存儲重複元素的集合,它的實現比較簡單,只要理解了 HashMap,HashSet就水到渠成了。
從圖中能夠看出:首先了解下 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+篇~ 複製代碼