前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >java集合框架-HashSet

java集合框架-HashSet

原创
作者头像
玖叁叁
发布2023-05-07 13:34:45
3520
发布2023-05-07 13:34:45
举报
文章被收录于专栏:玖叁叁玖叁叁

HashSet的特点

HashSet是一个无序的集合,它不保证元素的顺序,并且允许存储null元素(只能存储一个null元素)。HashSet中不允许存储重复的元素,当尝试将一个已经存在于集合中的元素添加到HashSet中时,该元素将不会被添加。HashSet是线程不安全的,因此如果多个线程同时访问一个HashSet实例,则必须进行外部同步。

HashSet是基于哈希表的实现,它使用哈希函数将元素映射到哈希表中的某个位置,从而实现快速查找和插入元素。哈希函数的作用是将元素的关键字(或散列码)映射到哈希表的某个位置,这个位置被称为桶(bucket)。当元素需要查找或插入时,只需要使用哈希函数计算出元素对应的桶的位置,然后在该桶中查找或插入元素即可。如果哈希函数的设计合理,那么大部分元素的查找和插入操作的时间复杂度将是常数级别的。

在使用哈希表存储元素时,如果两个元素映射到了同一个桶中,这种情况被称为哈希冲突。当出现哈希冲突时,HashSet使用链表来解决冲突。也就是说,哈希表的每个桶实际上是一个链表的头节点,当两个元素映射到同一个桶中时,它们将被添加到该桶对应链表的末尾。这种方法被称为拉链法(Chaining),可以有效地解决哈希冲突的问题。

HashSet的常用方法

HashSet实现了Set接口的所有方法,因此可以使用Set接口的方法来操作HashSet对象。此外,HashSet还定义了一些自己的方法,下面介绍一些常用的方法。

  • boolean add(E e):将指定的元素添加到HashSet中,如果HashSet中已经存在该元素,则返回false,否则返回true。
  • boolean remove(Object o):将指定的元素从HashSet中删除,如果HashSet中不存在该元素,则返回false,否则返回true。
  • boolean contains(Object o):判断HashSet中是否包含指定的元素,如果包含则返回true,否则返回false。
  • int size():返回HashSet中元素的个数。
  • boolean isEmpty():判断HashSet是否为空,如果为空则返回true,否则返回false。
  • void clear():清空HashSet中所有元素。
  • Iterator<E> iterator():返回一个迭代器,用于遍历HashSet中的所有元素。

需要注意的是,在使用HashSet时,如果元素的哈希值发生改变,可能会导致元素无法正确地被查找或删除。因此,如果需要使用可变对象作为HashSet的元素,需要保证对象的哈希值不会发生改变,或者使用不可变对象作为元素。

HashSet的示例

下面给出一个使用HashSet的示例,该示例演示了如何使用HashSet来去除数组中的重复元素。

代码语言:javascript
复制
import java.util.HashSet;

public class HashSetExample {
    public static void main(String[] args) {
        int[] nums = {1, 2, 3, 2, 1, 4, 5, 4, 6};

        HashSet<Integer> set = new HashSet<>();
        for (int num : nums) {
            set.add(num);
        }

        System.out.println("去除重复元素后的数组:");
        for (int num : set) {
            System.out.print(num + " ");
        }
    }
}

该示例首先定义了一个包含重复元素的整型数组nums,然后使用HashSet来去除数组中的重复元素。具体来说,通过遍历数组中的每个元素,将元素添加到HashSet中。由于HashSet不允许存储重复的元素,因此最终得到的HashSet中只包含数组中的不重复元素。最后,使用foreach循环遍历HashSet中的所有元素,并输出到控制台。

运行该程序,输出结果如下:

代码语言:javascript
复制
去除重复元素后的数组:
1 2 3 4 5 6

可以看到,HashSet成功地去除了数组中的重复元素,并将不重复的元素输出到了控制台上。

除了去除数组中的重复元素,HashSet还可以用于去除其他集合中的重复元素,以及判断两个集合是否相等等场景。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • HashSet的特点
  • HashSet的常用方法
  • HashSet的示例
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档