天天看点

集合框架_HashSet存储自定义对象并遍历

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;
  }

}