Java中set集合接口: 用于存儲(chǔ)沒有重復(fù)元素(equals()和hashCode())的集合,可以存儲(chǔ)null元素.
下面詳細(xì)介紹HashSet
HashSet實(shí)現(xiàn)方式: 通過(guò)hash索引的方式來(lái)存儲(chǔ)和取值,內(nèi)部通過(guò)維護(hù)一個(gè)HashMap來(lái)實(shí)現(xiàn)的,我們知道HashMap的key是唯一的不能重復(fù)的,并且也是通過(guò)hash方式來(lái)索引的, 這一點(diǎn)特性恰好是跟HashSet不謀而合,所以HashSet是直接通過(guò)HashMap來(lái)實(shí)現(xiàn)的.他的所有操作都是間接調(diào)用的HashMap方法來(lái)實(shí)現(xiàn)的
類定義
public class HashSet<E>
extends AbstractSet<E>
implements Set<E>, Cloneable, java.io.Serializable
成員變量
| 修飾符 | 變量名 | 作用 |
|---|---|---|
| private transient HashMap<E,Object> | map | 內(nèi)部維護(hù)的map |
| private static final Object | PRESENT = new Object() | 存放在map中的值對(duì)象,做占位而已 |
構(gòu)造方法
public HashSet() {
map = new HashMap<>();
}
public HashSet(int initialCapacity) {
map = new HashMap<>(initialCapacity);
}
方法
只列舉幾個(gè)方法, 他的具體實(shí)現(xiàn)請(qǐng)參考HashMap講解
public Iterator<E> iterator() {
return map.keySet().iterator();
}
public int size() {
return map.size();
}
public boolean contains(Object o) {
return map.containsKey(o);
}