HashSet

List 接口 不唯一 有序
下面实现类为 ArrayList Vector LinkList
Set 接口 唯一 无序(无序不等于随机)
没有跟索引相关的方法 无法使用普通for循环遍历
复制代码

@AllArgsConstructor
@NoArgsConstructor
@Data
public class Student {
private int age;
private String name;
}

基本数据类型会重写toString 方法

package com.msb.HashSet; import java.util.HashSet;
/** * @author lcc * @version V1.0 * @Package com.msb.HashSet * @date 2022/4/24 10:32 */ public class StudentTesty { public static void main(String[] args) { HashSet<Student> hashSet = new HashSet<>();//这里我用的是lombok 注解自动重写了equals和hash hashSet.add(new Student(21,"lili")); hashSet.add(new Student(11,"lili")); hashSet.add(new Student(31,"lili")); hashSet.add(new Student(41,"lili")); hashSet.add(new Student(51,"lili")); System.out.println(hashSet);//value值相同不影响 System.out.println("------------------"); hashSet.clear(); hashSet.add(new Student(11,"zhangsan")); hashSet.add(new Student(11,"lili")); hashSet.add(new Student(11,"lisi")); hashSet.add(new Student(11,"wangwu")); hashSet.add(new Student(11,"zhaoliu")); System.out.println(hashSet);//相同的key 也能添加 System.out.println("----------------------"); hashSet.clear(); hashSet.add(new Student(11,"zhangsan")); System.out.println(hashSet.add(new Student(11, "lili"))); System.out.println(hashSet.add(new Student(11, "lili"))); hashSet.add(new Student(11,"wangwu")); hashSet.add(new Student(11,"zhaoliu")); System.out.println(hashSet);//当key和value 都相同时 只能插入一个 也是第一个插入成功 第二个插入失败 } }
复制代码
hashset底层是数组
基本数据类型都有调用了hashCode方法计算出的hash值 在放入底层数组中
因为引用数据类型没有重写hashcode 方法 所以不会有唯一性

 

 

 

 

 

通过hash 值和一个底层表达式计算 数组中存放的位置的索引 也就是底层数组中的索引

 

当hashcode 值不同 那么认为是不同的元素  但是若经过表达式计算出的结果相同
那么会在对应底层数组锁对应的索引哪里生成链表,将相同索引的数据放入链表中

但是如果hashcode相同,那么必定是同一个元素  那么经过表达式后肯定索引会相同 
那么这个元素就不会放入底层数组  equals方法判断

 

 

 

 引用数据类型一定要重写以上两个方法 才能保证hashset 数据唯一

 

posted @   花心大萝卜li  阅读(98)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
点击右上角即可分享
微信分享提示