HashSet的使用方法總結、實現原理、使用示例

目錄

 

存儲特點:無序,不重複

底層原理:基於HashMap

變量:

構造函數

HashSet():僅初始化內部HashMap

public HashSet(Collection c):通過集合初始化

public HashSet(int initialCapacity):有HashMap內數組初始長度的構造

public HashSet(int initialCapacity, float loadFactor):有HashMap內數組初始長度和加載因子的構造

HashSet(int initialCapacity, float loadFactor, boolean dummy):有HashMap內數組初始長度和加載因子的構造,dummy沒用上

public void clear():清理,把HashMap數組所有值置空

public Object clone():克隆權限的set

public boolean contains(Object o):包含元素

public boolean isEmpty():是否爲空

public Iterator iterator():遍歷

public boolean remove(Object o):移除對象o

public int size():set目前元素數量

public Spliterator spliterator():並行執行而設計的迭代器


存儲特點:無序,不重複

底層原理:基於HashMap

變量:

private transient HashMap<E,Object> map; 存儲數據的hashMap
private static final Object PRESENT = new Object(); 僞值,以便與後備映射中的對象相關聯

構造函數

HashSet():僅初始化內部HashMap

public HashSet(Collection<? extends E> c):通過集合初始化

public class Test {
    public static void main(String[] args) {
        HashSet<String> set = new HashSet<>();
        set.add("a");
        set.add("b");
        set.add("c");
        set.add("d");
        set.add("a");

        //通過set初始化
        HashSet<String> strings = new HashSet<>(set);
        System.out.println(strings);

        //通過list初始化
        List list = new ArrayList();
        list.add(1);
        list.add(2);
        list.add(3);
        HashSet<String> t = new HashSet<>(list);
        System.out.println(t);
    }
}

結果:

[a, b, c, d]
[1, 2, 3]

public HashSet(int initialCapacity):有HashMap內數組初始長度的構造

詳見HashMap構造

public HashSet(int initialCapacity, float loadFactor):有HashMap內數組初始長度和加載因子的構造

HashSet(int initialCapacity, float loadFactor, boolean dummy):有HashMap內數組初始長度和加載因子的構造,dummy沒用上

public void clear():清理,把HashMap數組所有值置空

public class Test {
    public static void main(String[] args) {
        HashSet<String> set = new HashSet<>();
        set.add("a");
        set.add("b");
        set.add("c");
        set.add("d");
        set.add("a");
        System.out.println(set);
        set.clear();
        System.out.println(set);
    }
}

結果

[a, b, c, d]
[]

public Object clone():克隆權限的set

public class Test {
    public static void main(String[] args) {
        HashSet<String> set = new HashSet<>();
        set.add("a");
        set.add("b");
        set.add("c");
        set.add("d");
        set.add("a");
        System.out.println(set);
        HashSet<String> clone = (HashSet<String>)set.clone();
        clone.remove("d");
        System.out.println(clone);
    }
}

結果:修改克隆的set,對原來的set不影響

[a, b, c, d]
[a, b, c]

public boolean contains(Object o):包含元素

public boolean isEmpty():是否爲空

public Iterator<E> iterator():遍歷

public class Test {
    public static void main(String[] args) {
        HashSet<String> set = new HashSet<>();
        set.add("a");
        set.add("b");
        set.add("c");
        set.add("d");
        set.add("a");
        Iterator<String> iterator = set.iterator();
        while(iterator.hasNext()){
            System.out.println(iterator.next());
        }
    }
}

結果:

a
b
c
d

public boolean remove(Object o):移除對象o

public int size():set目前元素數量

public Spliterator<E> spliterator():並行執行而設計的迭代器

public class Test {
    public static void main(String[] args) {
        HashSet<String> set = new HashSet<>();
        for (int i = 0; i < 10000; i++) {

            set.add("" + i);

        }
        Iterator<String> iterator = set.iterator();
        while (iterator.hasNext()) {
            System.out.println(iterator.next());
        }
        System.out.println("main end");
    }
}

結果:

。。。
3627
4957
main end

 

 

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