集合框架_HashSet儲存自定義物件並遍歷
阿新 • • 發佈:2018-12-25
package cn.itcast_02; import java.util.HashSet; /* * 需求:儲存自定義物件,並保證元素的唯一性 * 需求:如果兩個物件的成員變數值都相同,則為同一個元素 * * 目前是不符合我的要求的:因為我們知道hashSet底層依賴的是hashCode()和equals()方法。 * 而這兩個方法而這兩個方法我們在學生類中沒有重寫,所以,預設使用的是Object類。 * 這個時候,它們雜湊值是不會一樣的,根本就不會繼續判斷,所以執行了新增操作 */ public class HashSetDemo2 { public static void main(String[] args) { // 建立集合物件 HashSet<Student> hs = new HashSet<Student>(); // 建立學生物件 Student s1 = new Student("張三", 14); Student s2 = new Student("李四", 44); Student s3 = new Student("王五", 25); Student s4 = new Student("王五", 25); // 把學生物件新增到集合物件中 hs.add(s1); hs.add(s2); hs.add(s3); hs.add(s4); // 遍歷集合 for (Student s : hs) { System.out.println(s.getName() + "---" + s.getAge()); } } }
package cn.itcast_02; public class Student { private String name; private int age; public Student() { super(); // TODO Auto-generated constructor stub } public Student(String name, int age) { super(); 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 int hashCode() { final int prime = 31; int result = 1; result = prime * result + age; result = prime * result + ((name == null) ? 0 : name.hashCode()); return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; Student other = (Student) obj; if (age != other.age) return false; if (name == null) { if (other.name != null) return false; } else if (!name.equals(other.name)) return false; return true; } }