HashSet集合存储自定义对象及注意事项
HashSet集合属于Set集合,不允许有重复元素;
如果想存储自定义对象,需要覆盖hashCode与equals方法,因为HashSet集合中元素的唯一性保证是靠:
1、先比较元素的hashCode,如果一样
2、再通过方法equals比较元素是否相等
若不等,则存入到HashSet当中。
所以如果你存储自定义对象,一定要覆盖此二方法。
而且,如果你删除元素或插元素,比较规则也是如上规则。才能保证插入元素与删除元素成功!
具体请看如下示例:
- 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);
- }
- }
- }
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);
}
}
}
重点看如下片段:
- import cn.itcast.list.Person;
- public class Prisoner extends Person
- {
- private double sentenceDate;
- public Prisoner(String name, int age, double sentenceDate) {
- // TODO Auto-generated constructor stub
- super(name, age);
- this.setSentenceDate(sentenceDate);
- }
- public int hashCode()
- {
- int hashCode = this.getName().hashCode() + this.getAge() * 31;
- return hashCode;
- }
- public boolean equals(Object object)
- {
- Prisoner prisoner = null;
- if(object instanceof Prisoner)
- {
- prisoner = (Prisoner)object;
- }
- return (this.getName().equals(prisoner.getName()) && this.getAge() == prisoner.getAge() &&
- this.getSentenceDate() == this.getSentenceDate());
- }
- public void setSentenceDate(double sentenceDate) {
- this.sentenceDate = sentenceDate;
- }
- public double getSentenceDate() {
- return sentenceDate;
- }
- public String toString(){
- return this.getName()+"::"+this.getAge()+"::"+ this.sentenceDate;
- }
- }