Java HashSet

1 什么是Java HashSet

Java HashSet类用于创建使用哈希表进行存储的集合。它继承了AbstractSet类并实现Set接口。

Java HashSet类的核心要点是:

  • HashSet通过使用一种称为哈希的机制来存储元素。
  • HashSet不能存放重复元素。
  • HashSet允许为空值。
  • HashSet类是非同步的(线程不安全)。
  • HashSet元素是无序的。因为元素是根据其哈希码插入的。
  • HashSet方便检索数据。
  • HashSet的初始默认容量为16,而负载因子为0.75。

2 List和Set的区别

List可以包含重复元素,而Set仅包含唯一元素。

3 Java HashSet的层次结构

HashSet类继承了实现Set接口的AbstractSet类。Set接口继承Collection和Iterable接口。

4 Java HashSet的语法

public class HashSet<E> extends AbstractSet<E> implements Set<E>, Cloneable, Serializable  

5 Java HashSet的构造方法

构造方法 描述
HashSet() 用于构造默认的HashSet。
HashSet(int capacity) 用于将HashSet的容量初始化为给定的整数容量。随着将元素添加到HashSet中,容量会自动增长。
HashSet(int capacity, float loadFactor) 用于将HashSet的容量初始化为给定的整数容量和指定的负载因子。
HashSet(Collection<? extends E> c) 用于通过使用集合来初始化HashSet。

6 Java HashSet的方法

修饰符 方法 描述
boolean add(E e) 如果指定的元素尚不存在,则用于将其添加到此集合中。
void clear() 用于删除集合中的所有元素。
object clone() 用于返回此HashSet实例的浅表副本:元素本身未克隆。
boolean contains(Object o) 如果此集合包含指定的元素,则用于返回true。
boolean isEmpty() 如果此集合不包含任何元素,则用于返回true。
Iterator<E> iterator() 用于返回此集合中元素的迭代器。
boolean remove(Object o) 如果存在指定元素,则用于从该集合中删除该元素。
int size() 用于返回集合中的元素数。
Spliterator<E> spliterator() Java1.8引入的一种并行遍历的机制

7 Java HashSet的例子

让我们看一个简单的HashSet示例。注意,元素在无序集合中进行迭代。

package com.yiidian;

/**
 * 一点教程网: http://www.yiidian.com
 */
/**
 * Java HashSet的例子
 */
import java.util.*;

class Demo{
    public static void main(String args[]){
        //创建HashSet,添加元素
        HashSet<String> set=new HashSet();
        set.add("One");
        set.add("Two");
        set.add("Three");
        set.add("Four");
        set.add("Five");
        Iterator<String> i=set.iterator();
        while(i.hasNext())
        {
            System.out.println(i.next());
        }
    }
}

输出结果为:

Five
One
Four
Two
Three

8 Java HashSet排除重复元素

package com.yiidian;

/**
 * 一点教程网: http://www.yiidian.com
 */
/**
 * Java HashSet的例子
 */
import java.util.*;

class Demo{

    public static void main(String args[]){
        //创建HashSet,添加元素
        HashSet<String> set=new HashSet<String>();
        set.add("eric");
        set.add("jack");
        set.add("lucy");
        set.add("jack");
        //遍历元素
        Iterator<String> itr=set.iterator();
        while(itr.hasNext()){
            System.out.println(itr.next());
        }
    }
}

输出结果为:

eric
jack
lucy

9 Java HashSet删除元素

package com.yiidian;

/**
 * 一点教程网: http://www.yiidian.com
 */
/**
 * Java HashSet的例子
 */
import java.util.*;

class Demo{

    public static void main(String args[]){
        HashSet<String> set=new HashSet<String>();
        set.add("eric");
        set.add("jack");
        set.add("mark");
        set.add("rose");
        System.out.println("初始化HashSet: "+set);
        //删除元素
        set.remove("mark");
        System.out.println("调用remove(object)方法后: "+set);
        HashSet<String> set1=new HashSet<String>();
        set1.add("lucy");
        set1.add("lucas");
        set.addAll(set1);
        System.out.println("更新后的HashSet: "+set);
        //删除HashSet的所有元素
        set.removeAll(set1);
        System.out.println("调用removeAll()方法后: "+set);
        //删除指定元素
        set.removeIf(str->str.contains("lucy"));
        System.out.println("调用removeIf()方法后: "+set);
        //清空所有元素
        set.clear();
        System.out.println("调用clear()方法后: "+set);
    }
}

输出结果为:

初始化HashSet: [eric, rose, jack, mark]
调用remove(object)方法后: [eric, rose, jack]
更新后的HashSet: [lucas, eric, rose, lucy, jack]
调用removeAll()方法后: [eric, rose, jack]
调用removeIf()方法后: [eric, rose, jack]
调用clear()方法后: []

10 用Collection构造HashSet

package com.yiidian;

/**
 * 一点教程网: http://www.yiidian.com
 */
/**
 * Java HashSet的例子
 */
import java.util.*;

class Demo{

    public static void main(String args[]){
        ArrayList<String> list=new ArrayList<String>();
        list.add("eric");
        list.add("jack");
        list.add("rose");

        HashSet<String> set=new HashSet(list);
        set.add("mark");
        Iterator<String> i=set.iterator();
        while(i.hasNext())
        {
            System.out.println(i.next());
        }
    }
}

输出结果为:

eric
rose
jack
mark

 

推荐好课