Java基础学习之HashSet集合

Java基础学习之HashSet集合

哈希表

HashSet集合的底层数据结构是哈希表
哈希表= 数组+链表
哈希表= 数组+红黑树

哈希值

由系统给出的一个十进制整数值,是逻辑地址不是物理地址。

hashcode()方法的源码中的native关键字意思是调用操作系统提供的方法。

public native int hashCode();//native关键字意思是调用操作系统提供的方法。

HashSet的使用

使用HashSet存储自定义类型数据时,如果想实现同一年龄同一姓名的人是同一个人,需要重写hashcode()和equals()方法。(直接在IDEA的code—generate里重写这两个方法就行)

String已经重写了hashcode()和equals()方法。

注意:这里是为了使不同对象在成员变量代表的属性相同时,使它们在HashSet中不可以重复存储。而特别使用HashSet存储自定义数据类型时多半有此目的。

重复元素不是同一个元素。要特别注意理解这里的重复含义,如仅仅是指不能重复存储创建的同一个对象,则几乎没啥意义。

如何判断重复元素:只有在两个对象的哈希值相同,equals()方法返回true时才会认定两个元素相同。

hashcode()方法是可以重写的。

public class Demo1 {
    public static void main(String[] args) {
        HashSelf p1 = new HashSelf("网名",18);
        HashSelf p2 = new HashSelf("网名",18);
        HashSelf p3 = new HashSelf("黑暗",19);
        HashSet<HashSelf> set = new HashSet<>();
        set.add(p1);
        set.add(p2);
        set.add(p3);
        System.out.println(set);//这里的p1和p2不会被认为重复元素,因为没有重写HashCode()方法和equals()方法。
    }
}


如果多次向一个HashSet中添加统一个对象,它们不会被成功添加,它们必然会被认为重复元素。

public class Demo1 {
    public static void main(String[] args) {
        HashSelf p1 = new HashSelf("网名",18);
        HashSelf p2 = new HashSelf("网名",18);
        HashSelf p3 = new HashSelf("黑暗",19);
        HashSet<HashSelf> set = new HashSet<>();
        set.add(p1);
        set.add(p2);
        set.add(p3);
        set.add(p3);
        System.out.println(set);//集合中任然只有三个元素
    }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值