HashSet

  • 参数类型:
    E - 由此集合维护的元素的类型

此类实现Set接口,由哈希表支持。 对集合的迭代次序不作任何保证; 特别是,它不能保证顺序在一段时间内保持不变。 这个类允许null元素,无重复元素。

构造方法

HashSet()
构造一个新的空集合; 背景HashMap实例具有默认初始容量(16)和负载因子(0.75)。
HashSet(Collection<? extends E> c)
构造一个包含指定集合中的元素的新集合。
HashSet(int initialCapacity)
构造一个新的空集合; 背景HashMap实例具有指定的初始容量和默认负载因子(0.75)。
HashSet(int initialCapacity, float loadFactor)
构造一个新的空集合; 背景HashMap实例具有指定的初始容量和指定的负载因子。

负载因子:当集合容量为16,负载因子为0.75时,集合中的元素个数为16×0.75=12时,将自动进行扩容。

 

import java.util.ArrayList;
import java.util.HashSet;

public class Main {
    public static void main(String[] args) {
        /*
        HashSet()
        构造一个新的空集合; 背景HashMap实例具有默认初始容量(16)和负载因子(0.75)。
         */
        HashSet <String> hashSet1 = new HashSet<>();

        /*
        HashSet(Collection<? extends E> c)
        构造一个包含指定集合中的元素的新集合。
         */
        ArrayList<String> list = new ArrayList<>();
        list.add("张三");
        list.add("李四");
        list.add("王五");
        HashSet<String> hashSet2 = new HashSet<>(list);
        
        /*
        HashSet(int initialCapacity)
        构造一个新的空集合; 背景HashMap实例具有指定的初始容量和默认负载因子(0.75)。
         */
        HashSet<String> hashSet3 = new HashSet<>(20);

        /*
        HashSet(int initialCapacity, float loadFactor) 
        构造一个新的空集合; 背景HashMap实例具有指定的初始容量和指定的负载因子。 
         */
        HashSet<String> hashSet4 = new HashSet<String>(50, 0.75);
    }
}

主要方法

方法名

说明

boolean add(E e)

将指定的元素添加到此集合(如果尚未存在)。

void clear()

从此集合中删除所有元素。

boolean contains(Object o)

如果此集合包含指定的元素,则返回 true 。

boolean isEmpty()

如果此集合不包含元素,则返回 true 。

Iterator iterator()

返回此集合中元素的迭代器。

boolean remove(Object o)

如果存在,则从该集合中删除指定的元素。

int size()

返回此集合中的元素数

Object[] toArray()

返回一个包含此集合中所有元素的数组。

T[] toArray(T[] a)

返回一个包含此集合中所有元素的数组; 返回的数组的运行时类型是指定数组的运行时类型。

add(E e)

boolean add(E e) 将指定的元素添加到此集合(如果尚未存在)
返回值为是否添加成功。
HashSet中不能存储重复元素,所以即使多次添加,也只会存在一次。
如果存储自定义类需要重写类的equals()方法和hashCode()方法,这样才能判断两个对象是否是重复对象。

import java.util.ArrayList;
import java.util.HashSet;

public class Main {
    public static void main(String[] args) {
        
        //构造一个新的空集合
        HashSet <String> hashSet = new HashSet<>();

        /*
        boolean add(E e) 将指定的元素添加到此集合(如果尚未存在)。
        HashSet中不能存储重复元素,所以即使多次添加,也只会存在一次。
         */
        boolean a1 = hashSet.add("张三");
        hashSet.add("李四");
        hashSet.add("王五");
        boolean a2 = hashSet.add("张三");
        System.out.println(a1 +" "+ a2);

    }
}

运行结果:

hashkey的使用java_System

clear()

从此集合中删除所有元素,清空集合。

import java.util.ArrayList;
import java.util.HashSet;

public class Main {
    public static void main(String[] args) {
        /*
        构造一个新的空集合
         */
        HashSet <String> hashSet = new HashSet<>();
        //添加元素
        hashSet.add("张三");
        hashSet.add("李四");
        hashSet.add("王五");

        System.out.println(hashSet);

        //清空集合
        hashSet.clear();

        //输出清空之后的集合
        System.out.println(hashSet);

    }
}

运行结果:

hashkey的使用java_数组_02

boolean contains(Object o)

如果此集合包含指定的元素,则返回 true 。

import java.util.ArrayList;
import java.util.HashSet;

public class Main {
    public static void main(String[] args) {
        /*
        构造一个新的空集合
         */
        HashSet <String> hashSet = new HashSet<>();
        //添加元素
        hashSet.add("张三");
        hashSet.add("李四");
        hashSet.add("王五");

        System.out.println(hashSet.contains("赵四"));
        System.out.println(hashSet.contains("张三"));
    }
}

运行结果:

hashkey的使用java_数组_03

boolean isEmpty()

如果此集合不包含元素,则返回 true 。

import java.util.ArrayList;
import java.util.HashSet;

public class Main {
    public static void main(String[] args) {
        /*
        构造一个新的空集合
         */
        HashSet <String> hashSet = new HashSet<>();

        System.out.println(hashSet.isEmpty());
        //添加元素
        hashSet.add("张三");
        hashSet.add("李四");
        hashSet.add("王五");

        System.out.println(hashSet.isEmpty());

    }
}
Iterator iterator()

返回此集合中元素的迭代器。

import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;

public class Main {
    public static void main(String[] args) {
        /*
        构造一个新的空集合
         */
        HashSet <String> hashSet = new HashSet<>();
        //添加元素
        hashSet.add("张三");
        hashSet.add("李四");
        hashSet.add("王五");

        Iterator it = hashSet.iterator();
        
        //遍历集合
        while(it.hasNext()) {
            System.out.println(it.next());
        }

    }
}

运行结果:

hashkey的使用java_java_04

boolean remove(Object o)

如果存在,则从该集合中删除指定的元素。

import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;

public class Main {
    public static void main(String[] args) {
        /*
        构造一个新的空集合
         */
        HashSet <String> hashSet = new HashSet<>();
        //添加元素
        hashSet.add("张三");
        hashSet.add("李四");
        hashSet.add("王五");

        //删除 “李四”
        hashSet.remove("李四");

        Iterator it = hashSet.iterator();

        //遍历集合
        while(it.hasNext()) {
            System.out.println(it.next());
        }

    }
}

运行结果:

hashkey的使用java_hashkey的使用java_05

int size()

返回此集合中的元素数

import java.util.ArrayList;
import java.util.HashSet;

public class Main {
    public static void main(String[] args) {
        /*
        构造一个新的空集合
         */
        HashSet <String> hashSet = new HashSet<>();
        //添加元素
        hashSet.add("张三");
        hashSet.add("李四");
        hashSet.add("王五");

        System.out.println(hashSet.size());

    }
}

运行结果:

hashkey的使用java_数组_06

toArray()

返回一个包含此集合中所有元素的数组

import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;

public class Main {
    public static void main(String[] args) {
        /*
        构造一个新的空集合
         */
        HashSet <String> hashSet = new HashSet<>();
        //添加元素
        hashSet.add("张三");
        hashSet.add("李四");
        hashSet.add("王五");

        //将集合转换成数组
        String []str = hashSet.toArray(new String[0]);
        
        System.out.println("数组中的内容是:");
        for(String s : str) {
            System.out.println(s);
        }
    }
}

运行结果:

hashkey的使用java_System_07

LinkedHashSet

底层为哈希表+链表,当元素大于8时,变为数组+红黑树,和HashSet不同的是LinkHashSet有序,双重链表中存储了将元素插入集合的顺序,此实现不同步。

构造方法

LinkedHashSet()
构造一个具有默认初始容量(16)和负载因子(0.75)的新的,空的链接散列集。
LinkedHashSet(Collection<? extends E> c)
构造与指定集合相同的元素的新的链接散列集。
LinkedHashSet(int initialCapacity)
构造一个具有指定初始容量和默认负载因子(0.75)的新的,空的链接散列集。
LinkedHashSet(int initialCapacity, float loadFactor)
构造具有指定的初始容量和负载因子的新的,空的链接散列集。