JAVA学习 集合框架HashSet(二)

总结:
//HashSet存储自定义对象
/*
* HashSet是如何保证元素唯一性的呢?
* 是通过元素的两个方法,hasCode和equals来完成的
* 如果元素的hashCode值相同,才会判断equals是否为true。
* 如果元素的hashCode值不同,不会调用equals。

*/

package Collection;
import java.util.*;
public class SetDemo {
	public static void main(String[] args) {
		HashSet hs=new HashSet();
		hs.add(new Person("lisi01",22));
		hs.add(new Person("lisi01",22));
		hs.add(new Person("lisi03",22));
		hs.add(new Person("lisi04",22));
		
		Iterator it=hs.iterator();
		while(it.hasNext()){
			Person p=(Person)it.next();
			System.out.println(p.getName()+"..."+p.getAge());
		}
	}
}

class Person{
	private String name;
	private int age;
	Person(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;
	}
	
	public boolean equals(Object obj){
		if(!(obj instanceof Person))
			return false;
		Person p=(Person)obj;
		return (this.name.equals(p.name)&&(this.age==p.age));
	}
}

结果如下:


HashSet不是元素不可重复吗?
原因:重复元素指是地址相同且内容也相同,而上述代码中的对象都是new开辟空间建立的,他们只是内容相同,而地址是不同的,所以HashSet把他们视为不同对象。


package Collection;
import java.util.*;

public class SetDemo {
	public static void main(String[] args) {
		HashSet hs=new HashSet();
		hs.add(new Person("lisi01",22));
		hs.add(new Person("lisi01",22));
		hs.add(new Person("lisi03",22));
		hs.add(new Person("lisi04",22));
		
		Iterator it=hs.iterator();
		while(it.hasNext()){
			Person p=(Person)it.next();
			System.out.println(p.getName()+"..."+p.getAge());
		}
	}
}

class Person{
	private String name;
	private int age;
	Person(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;
	}
	
	public boolean equals(Object obj){
		if(!(obj instanceof Person))
			return false;
		Person p=(Person)obj;
		//System.out.println(this.name+"....equals..."+p.name);
		return (this.name.equals(p.name)&&(this.age==p.age));
	}
	
	//通过重写hashCode函数来解决出现相同元素问题
	public int hashCode(){
		//System.out.println(name+"....");
		return (name.hashCode()+age*37);
	}
	
}

结果:


猜你喜欢

转载自blog.csdn.net/kwj1999999/article/details/80276487