#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); } }
作者本人所有随笔仅为学习笔记,仅供参考