HashSet实现类的使用
【1】放入Integer类型数据
package com.msb.test06; import java.util.HashSet; /** * @author : liu * 日期:10:36:57 * 描述:IntelliJ IDEA * 版本:1.0 */ public class TestInteger { //这是一个main方法:是程序的入口 public static void main(String[] args) { //创建一个HashSet集合 HashSet<Integer> hs = new HashSet<>(); System.out.println(hs.add(19));//true hs.add(5); hs.add(20); System.out.pringln(hs.add(19));//false没有被写入集合 hs.add(41); hs.add(0); System.out.println(hs.size());//唯一 无序 System.out.println(hs); } }
【2】放入String类型数据
package com.msb.test06; import java.util.HashSet; /** * @author : liu * 日期:10:41:10 * 描述:IntelliJ IDEA * 版本:1.0 */ public class TestString { //这是一个main方法:是程序的入口 public static void main(String[] args) { HashSet<String> hs=new HashSet<>(); hs.add("hello"); hs.add("apple"); hs.add("banana"); hs.add("html"); hs.add("apple"); hs.add("css"); System.out.println(hs.size()); System.out.println(hs); } }
【3】放入自定义引用数据类型的数据
package com.msb.test06; import java.util.HashSet; /** * @author : liu * 日期:10:48:02 * 描述:IntelliJ IDEA * 版本:1.0 */ public class TestStudent { //这是一个main方法:是程序的入口 public static void main(String[] args) { //创建一个HashSet集合 HashSet<Student> hs=new HashSet<>(); hs.add(new Student(19,"lili")); hs.add(new Student(20,"lulu")); hs.add(new Student(18,"feifei")); hs.add(new Student(19,"lili")); hs.add(new Student(10,"nana")); System.out.println(hs.size()); System.out.println(hs); } }
上面自定义的类型不满足唯一、无序类型数据的特点。为什么呢?
【4】HashSet原理图:(简要原理图)
package com.msb.test06; import java.util.Objects; /** * @author : liu * 日期:10:47:02 * 描述:IntelliJ IDEA * 版本:1.0 */ public class Student { private int age; private String name; public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public String toString() { return "Student{" + "age=" + age + ", name='" + name + '\'' + '}'; } public Student(int age, String name) { this.age = age; this.name = name; } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; Student student = (Student) o; return age == student.age && Objects.equals(name, student.name); } @Override public int hashCode() { return Objects.hash(age, name); } }
【5】疑问:
1、数组的长度是多少,
2、数组的类型是啥
3、hashCode ,equals方法真的调用了吗?验证
4、底层的表达式是什么
5、同一个位置的数据向前放还是向后放
6、放入数组中的数据是直接放的吗?是否封装为对象了?
【推荐】国内首个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搭建本