Java HashSet

1、HashSet 基于 HashMap 来实现的,是一个不允许有重复元素的集合。
2、HashSet 允许有 null 值。
3、HashSet 是无序的,即不会记录插入的顺序。
4、HashSet 不是线程安全的, 如果多个线程尝试同时修改 HashSet,则最终结果是不确定的。 您必须在多线程访问时显式同步对 HashSet 的并发访问。
5、HashSet 实现了 Set 接口。
在这里插入图片描述
HashSet 中的元素实际上是对象,一些常见的基本类型可以使用它的包装类。

基本类型对应的包装类表如下:
在这里插入图片描述
HashSet 类位于 java.util 包中,使用前需要引入它,语法格式如下:

import java.util.HashSet; // 引入 HashSet 类

以下实例我们创建一个 HashSet 对象 sites,用于保存字符串元素:

HashSet<String> set = new HashSet<String>();

添加元素
HashSet 类提供类很多有用的方法,添加元素可以使用 add() 方法:

// 引入 HashSet 类      
import java.util.HashSet;

public class RunoobTest {
    public static void main(String[] args) {
    HashSet<String> set = new HashSet<String>();
        set.add("hello");
        set.add("中国");
        set.add("ok");
        set.add("hello");// 重复的元素不会被添加
        set.add("加油!");  
        System.out.println(set);
    }
}

运行结果:
[hello, 中国, 加油!, ok]

在上面的实例中,hello 被添加了两次,它在集合中也只会出现一次,因为集合中的每个元素都必须是唯一的。

判断元素是否存在
我们可以使用 contains() 方法来判断元素是否存在于集合当中:

// 引入 HashSet 类      
import java.util.HashSet;

public class RunoobTest {
    public static void main(String[] args) {
    HashSet<String> set = new HashSet<String>();
        set.add("hello");
        set.add("中国");
        set.add("ok");
        set.add("hello");// 重复的元素不会被添加
        set.add("加油!");  
        System.out.println(set.contains("ok"));
    }
}

运行结果:
true

删除元素
我们可以使用 remove() 方法来删除集合中的元素:

// 引入 HashSet 类      
import java.util.HashSet;

public class RunoobTest {
    public static void main(String[] args) {
    HashSet<String> set = new HashSet<String>();
        set.add("hello");
        set.add("中国");
        set.add("ok");
        set.add("hello");// 重复的元素不会被添加
        set.add("加油!");  
        set.remove("加油!")//删除成功返回true,否则返回false
        
运行结果:
[hello,ok,加油]

计算大小
如果要计算 HashSet 中的元素数量可以使用 size() 方法:

// 引入 HashSet 类      
import java.util.HashSet;

public class RunoobTest {
    public static void main(String[] args) {
    HashSet<String> set = new HashSet<String>();
        set.add("hello");
        set.add("中国");
        set.add("ok");
        set.add("hello");// 重复的元素不会被添加
        set.add("加油!");  
        System.out.println(set.size());
    }
}
运行结果:
4

迭代 HashSet
可以使用 for-each 来迭代 HashSet 中的元素。
也可以用迭代器来遍历集合

public class RunoobTest {
    public static void main(String[] args) {
    Set<String> set = new HashSet<>();
        set.add("hello");
        set.add("中国");
        set.add("ok");
        set.add("hello");// 重复的元素不会被添加
        set.add("加油!");

        Iterator<String> it = set.iterator();//迭代器,遍历集合
        while(it.hasNext()) {
            System.out.println(it.next());
        }
            System.out.println("==============");

        for (String s:set) {
            System.out.println(s);
        }
    }
    
运行结果:

中国
hello
加油!
ok
==============
中国
hello
加油!
ok

注意:

  1. Set是继承自Collection的一个接口类
  2. Set中只存储了key,并且要求key一定要唯一
  3. Set的底层是使用Map来实现的,其使用key与Object的一个默认对象作为键值对插入到Map中的
  4. Set最大的功能就是对集合中的元素进行去重
  5. 实现Set接口的常用类有TreeSet和HashSet,还有一个LinkedHashSet,LinkedHashSet是在HashSet的基础
    上维护了一个双向链表来记录元素的插入次序。
  6. Set中的Key不能修改,如果要修改,先将原来的删除掉,然后再重新插入

在这里插入图片描述

更多 API 方法可以查看:HashSet方法

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值