自己實現HashSet

HashSet的實現相對比較簡單。它強依賴於HashMap,包括底層數據實際上就是存儲於HashMap,由於HashMap在哈希碰撞下,如果value值相同,那麼將會覆蓋該value,HashSet正是利用這一特性來達到元素唯一的。

一屬性

定義一個HashMap裝載數據,定義一個final的Object來做爲HashMap的value。

public class MyHashSet<E> {
    
    private transient MyHashMap<E, Object> map;
    
    private transient final Object value = new Object();

}

添加構造方法

public MyHashSet(){
        map = new MyHashMap<E, Object>();
    }
    
    public MyHashSet(int initCount){
        map = new MyHashMap<E, Object>(initCount);
    }
    
    public MyHashSet(int initCount, float loadFactor){
        map = new MyHashMap<E, Object>(initCount, loadFactor);
    }

二方法

1增加

返回空表示添加成功,不爲空表示已經存在該元素。

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

 2刪除

public void remove(E e){
        map.remove(e);
    }

3迭代

直接從HashMap得到迭代器。

public class MyHashSet<E> implements Iterable<E>{  
    public Iterator<E> iterator(){
        return map.keySet().iterator();
    }  
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章