#class Test
import java.util.HashSet; import java.util.Iterator; import java.util.Set; /* Set集合: 无序(元素的存取顺序不一致,如:存(123),打印(213或312等))、不重复 应用: Set<T> set = new HashSet<>(); 结论: Set集合保证元素的唯一性依赖:equals(),hashCode()两个方法 */ public class Test { public static void main(String[] args) { //向Set集合中添加五个元素,并遍历打印 //创建集合对象 Set<Student> set = new HashSet<>(); //创建元素对象 Student s1 = new Student("a",14); Student s2 = new Student("b",15); Student s3 = new Student("a",14); Student s4 = new Student("c",16); Student s5 = new Student("b",15); //向集合中添加对象 set.add(s1); set.add(s2); set.add(s3); set.add(s4); set.add(s5); //遍历集合 /* 为什么Set集合没有去重 因为Set集合保证元素的唯一性依赖:equals()和hashCode()两个方法 没有在Student类中重写这两个方法,默认调用的是Object类中的这两个方法 而Object类中的equals()方法默认比较的是地址值是否相同 因为s1-s5都独立分配了内存空间,所以地址值肯定不同,所以没有去重 解决方案: 在Student类找重写equals()和hashCode()方法 */ System.out.println("直接打印set"); System.out.println(set); System.out.println("========================================"); //通过集合对象获取其对应的迭代器对象 Iterator<Student> iterator = set.iterator(); //判断迭代器中是否有元素 System.out.println("通过迭代器实现"); while (iterator.hasNext()){ //如果有就获取元素 Student s = iterator.next(); System.out.println(s); } System.out.println("========================================"); //通过增强for遍历Set集合 System.out.println("通过增强for遍历Set集合"); for (Student student : set) { System.out.println(student); } } } #class Student import java.util.Objects; //学生类 public class Student { //成员变量 private String name; private int age; public Student() { } public Student(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String toString() { return "Student{" + "name='" + name + '\'' + ", age=" + age + '}'; } @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(name, age); } }
作者本人所有随笔仅为学习笔记,仅供参考
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)