首页 > 代码库 > 关于HashCode对集合的影响之HashSet删除操作

关于HashCode对集合的影响之HashSet删除操作

package com.ArrayHashSet.a;

class Person {
	private String name;
	private int age;
	public Person(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;
		Person other = (Person) 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;
	}
	@Override
	public String toString() {
		return "Person [name=" + name + ", age=" + age + "]";
	}
	
}
public class Test {

	public static void main(String[] args) {

		Collection c = new HashSet();
		Person p = new Person("a",12);
		Person p2 = new Person("12",97);
		Person p3 = new Person("a",12);
		Person p4 = new Person("g",12);
		c.add(p4);
		c.add(p3);
		c.add(p2);
		c.add(p);
		//p2.setAge(2);//因为对p2的成员进行修改,导致hashcode被修改,在删除的时候                    //找不到要删除的对象
		c.remove(p2);
		for(Iterator it = c.iterator();it.hasNext();){
			System.out.println(it.next().toString());
		}
		
		
	}

}