你一定聽說過HashSet就是通過HashMap實現的 相信我,翻一翻HashSet的源碼,秒懂!! 其實很多東西,只是沒有靜下心來看,只要去看,說不定一下子就明白了…… HashSet 兩個屬性: 所有HashSet的操作都是通過對其屬性map操作實現的,map的key是HashSet,map的v ...
你一定聽說過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();
所有HashSet的操作都是通過對其屬性map操作實現的,map的key是HashSet,map的value都是PRESENT(傀儡)
LinkedHashSet
繼承了HashSet,其屬性map用的是LinkedHashMap
// LinkedHashSet中 public LinkedHashSet() { super(16, .75f, true); } // HashSet中 HashSet(int initialCapacity, float loadFactor, boolean dummy) { map = new LinkedHashMap<>(initialCapacity, loadFactor); }
TreeSet
同HashMap的兩個屬性,map用的是TreeMap
private transient NavigableMap<E,Object> m; // Dummy value to associate with an Object in the backing Map private static final Object PRESENT = new Object(); public TreeSet() { this(new TreeMap<E,Object>()); }