HashTest以及对象唯一性(一)

简介: package cn.cp; //尽管我们在Person类里写了equals方法,但是还是存入了两个name=liming,age=12的对象 //这是为什么呢???????? //因为HashSet在往里面存对象的时候,它存的是Hash值。
package cn.cp;
//尽管我们在Person类里写了equals方法,但是还是存入了两个name=liming,age=12的对象
//这是为什么呢????????
//因为HashSet在往里面存对象的时候,它存的是Hash值。
//虽然建立的两个name=liming,age=12但是他们的hash值不一样,所以当做了不同的对象。
//注意:
//(1)Java里一个hash值下可能有多个对象。
//(2)在HashSet中在比较是否是同一个对象时,先比较的hash值,若hash值不一样那么二者肯定不是同一元素。
//(3)hash值一样,再比较两个对象,若对象还一样则说明这是同一个东西,于是不再存入
//所以,我们这么做根本没有用
//这也就是我们常说的:一般来说重写equals()的同时总是要重写hashCode()方法
import java.util.HashSet;
import java.util.Iterator;
class Boy1 {
	private int age;
	private String name;

	public Boy1(int age, String name) {
		super();
		this.age = age;
		this.name = name;
	}

	public int getAge() {
		return age;
	}

	public String getName() {
		return name;
	}

	@Override
	public boolean equals(Object obj) {
		Boy1 b=(Boy1) obj;
		boolean result=this.age==b.age&&this.name.equals(b.name);
		return result;
	}

	@Override
	public String toString() {
		return "boy1 [age=" + age + ", name=" + name + "]";
	}

}

public class HashSetTest1 {
	public static void main(String[] args) {
      Boy1 boy1=new Boy1(12, "liming");
      Boy1 boy2=new Boy1(13, "liming");
      Boy1 boy3=new Boy1(12, "liming");
      HashSet hashSet=new HashSet();
      hashSet.add(boy1);
      hashSet.add(boy2);
      hashSet.add(boy3);
      Iterator iterator=hashSet.iterator();
      while(iterator.hasNext()){
      	System.out.println(iterator.next());
      }
	}
}

相关文章
|
20天前
|
SQL 数据管理 数据库
|
4月前
唯一性约束:unique
唯一性约束:unique。
41 3
|
Oracle 关系型数据库 索引
唯一约束和唯一索引区别
唯一约束和唯一索引区别
843 0
|
存储 缓存 NoSQL
分布式ID(唯一性)的生成方法汇总
分布式ID(唯一性)的生成方法汇总
分布式ID(唯一性)的生成方法汇总
|
数据可视化 开发者
使用VFL创建约束对象
使用VFL创建约束对象
99 0
|
存储 算法 数据库
如何保证 ID 的全局唯一性?
如何保证 ID 的全局唯一性?
459 0
如何保证 ID 的全局唯一性?