HashSet如何保证元素唯一性?

HashSet通过元素的hashCode()和equals()方法保证元素唯一性。当哈希值相同时,才会进行equals比较。如果equals返回false,则存入元素;如果返回true,则不存入。重写这两个方法能确保正确判断元素的唯一性。哈希冲突时,性能会下降,可通过优化hashCode()方法减少冲突。
摘要由CSDN通过智能技术生成

Collection中的Set分为HashSet和TreeSet
Set中的元素是无序的,即存入和取出的顺序不一定一致元素不可以重复。HashSet的底层数据结构是哈希表,元素存入的顺序是按照哈希值来排序的。
那么HashSet是如何保证元素唯一性的呢?

首先我们先直观地看看哈希值的样子

 class Demo{
}

public class HashSetTest {

    public static void main(String[] args) {
        Demo d1=new Demo();
        Demo d2=new Demo();
        sop(d1);
        sop(d2);
    }
    public static void sop(Object obj){
  //定义此sop方法用来快捷输出,在输出较多的情况下尤为快捷。
        System.out.println(obj);
    }
}

这里写图片描述

HashCode就长这个样子

这些HashCode是如何产生的呢?
HashSet有一个方法叫做 int hashCode(),会在默认情况下产生无序的16进制hashcode值。
为了让其得到体现,我们可以直接将其重写:
在Demo类中重写hashCode()方法

 class Demo{
     public int hashCode()
     {
         return 60;
     }
}

public class HashSetTest {

    public static void main(String[] args) {
        Demo d1=new Demo();
        Demo d2=new Demo();
        sop(d1);
        sop(d2);
    }
    public static void sop(Object obj){
        System.ou
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值