HashSet集合存储自定义对象及注意事项

存储 equals object constructor string iterator

HashSet集合存储自定义对象及注意事项

HashSet集合属于Set集合,不允许有重复元素;

如果想存储自定义对象,需要覆盖hashCode与equals方法,因为HashSet集合中元素的唯一性保证是靠:

1、先比较元素的hashCode,如果一样

2、再通过方法equals比较元素是否相等

若不等,则存入到HashSet当中。

所以如果你存储自定义对象,一定要覆盖此二方法。

而且,如果你删除元素或插元素,比较规则也是如上规则。才能保证插入元素与删除元素成功!

具体请看如下示例:

 

  1. import java.util.HashSet;  
  2. import java.util.Iterator;  
  3.   
  4. public class HashSetSummarize {  
  5.   
  6.     /** 
  7.      * @param args 
  8.      */  
  9.     public static void main(String[] args) {  
  10.         // TODO Auto-generated method stub   
  11.         operateObject();  
  12.     }  
  13.       
  14.     public static void operateObject()  
  15.     {  
  16.         Prisoner prisoner1 = new Prisoner("xiashengbing"3213.7);  
  17.         Prisoner prisoner2 = new Prisoner("lifenghong"353.5);  
  18.         Prisoner prisoner3 = new Prisoner("yangwei"2910.2);  
  19.         Prisoner prisoner4 = new Prisoner("dongyuxing"211);  
  20.         Prisoner prisoner5 = new Prisoner("qingshan"386.5);  
  21.         Prisoner prisoner6 = new Prisoner("lifenghong"353.5);  
  22.         HashSet<Prisoner> hashSet = new HashSet<Prisoner>();  
  23.           
  24.         hashSet.add(prisoner1);  
  25.         hashSet.add(prisoner2);  
  26.         hashSet.add(prisoner3);  
  27.         hashSet.add(prisoner4);  
  28.         hashSet.add(prisoner5);  
  29.         hashSet.add(prisoner6);  
  30.           
  31.         printHashSet(hashSet);  
  32.   
  33.           
  34.           
  35.     }  
  36.   
  37.     public static void printHashSet(HashSet<Prisoner> hashSet)  
  38.     {  
  39.         for (Iterator<Prisoner> iterator = hashSet.iterator(); iterator.hasNext();) {  
  40.             Prisoner prisoner = iterator.next();  
  41.             System.out.println(prisoner);  
  42.         }  
  43.     }  
  44. }  
import java.util.HashSet;
import java.util.Iterator;

public class HashSetSummarize {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		operateObject();
	}
	
	public static void operateObject()
	{
		Prisoner prisoner1 = new Prisoner("xiashengbing", 32, 13.7);
		Prisoner prisoner2 = new Prisoner("lifenghong", 35, 3.5);
		Prisoner prisoner3 = new Prisoner("yangwei", 29, 10.2);
		Prisoner prisoner4 = new Prisoner("dongyuxing", 21, 1);
		Prisoner prisoner5 = new Prisoner("qingshan", 38, 6.5);
		Prisoner prisoner6 = new Prisoner("lifenghong", 35, 3.5);
		HashSet<Prisoner> hashSet = new HashSet<Prisoner>();
		
		hashSet.add(prisoner1);
		hashSet.add(prisoner2);
		hashSet.add(prisoner3);
		hashSet.add(prisoner4);
		hashSet.add(prisoner5);
		hashSet.add(prisoner6);
		
		printHashSet(hashSet);

		
		
	}

	public static void printHashSet(HashSet<Prisoner> hashSet)
	{
		for (Iterator<Prisoner> iterator = hashSet.iterator(); iterator.hasNext();) {
			Prisoner prisoner = iterator.next();
			System.out.println(prisoner);
		}
	}
}


重点看如下片段:

 

  1. import cn.itcast.list.Person;  
  2.   
  3. public class Prisoner extends Person  
  4. {  
  5.     private double sentenceDate;  
  6.   
  7.     public Prisoner(String name, int age, double sentenceDate) {  
  8.         // TODO Auto-generated constructor stub   
  9.         super(name, age);  
  10.         this.setSentenceDate(sentenceDate);  
  11.     }  
  12.       
  13.     public int hashCode()  
  14.     {  
  15.         int hashCode = this.getName().hashCode() + this.getAge() * 31;  
  16.         return hashCode;  
  17.     }  
  18.       
  19.     public boolean equals(Object object)  
  20.     {  
  21.         Prisoner prisoner = null;  
  22.         if(object instanceof Prisoner)  
  23.         {  
  24.             prisoner = (Prisoner)object;  
  25.         }  
  26.           
  27.         return (this.getName().equals(prisoner.getName()) && this.getAge() == prisoner.getAge() &&   
  28.                 this.getSentenceDate() == this.getSentenceDate());  
  29.     }  
  30.   
  31.     public void setSentenceDate(double sentenceDate) {  
  32.         this.sentenceDate = sentenceDate;  
  33.     }  
  34.   
  35.     public double getSentenceDate() {  
  36.         return sentenceDate;  
  37.     }  
  38.       
  39.     public String toString(){  
  40.         return this.getName()+"::"+this.getAge()+"::"this.sentenceDate;  
  41.     }  
  42. }  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值