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 数据唯一
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本