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());
      }
	}
}

相关文章
|
1月前
|
存储 算法 Java
如何保证 hashCode()方法的唯一性
在Java中,`hashCode()` 方法用于生成对象的哈希码,是实现数据结构如哈希表的基础。虽然完全保证 `hashCode()` 的唯一性几乎不可能,但通过合理设计,如结合对象的关键属性,可以极大减少哈希冲突,提高程序效率和稳定性。
61 8
|
2月前
|
存储 算法 Java
作为Collection接口的子接口,Set不支持重复元素,也不保证元素顺序,适用于需要唯一性约束的场景。
【10月更文挑战第16天】Java的Set接口因其独特的“不重复性”而备受关注。作为Collection接口的子接口,Set不支持重复元素,也不保证元素顺序,适用于需要唯一性约束的场景。其背后的实现机制依赖于哈希表或红黑树等数据结构,通过哈希算法和equals()方法确保元素的唯一性。例如,使用HashSet可以轻松过滤重复的字符串。这种设计使Set在处理唯一数据时高效便捷。
30 3
|
4月前
|
SQL 数据管理 数据库
|
7月前
唯一性约束:unique
唯一性约束:unique。
92 3
|
存储 缓存 NoSQL
分布式ID(唯一性)的生成方法汇总
分布式ID(唯一性)的生成方法汇总
分布式ID(唯一性)的生成方法汇总
|
数据可视化 开发者
使用VFL创建约束对象
使用VFL创建约束对象
114 0
|
关系型数据库 MySQL 索引
【MySQL8.0学习笔记】约束:主键约束、自增长约束、非空约束、唯一性约束、默认约束与零填充约束
文章目录 1 MySQL约束简介 2 主键约束 2.1 主键约束的操作 2.1.1 添加单列主键 2.1.2 添加多列联合主键 2.1.3 通过修改表结构的方式添加主键 2.1.4 删除主键 3 自增长约束 3.1 指定自增长字段的初始值 3.1.1 delete和truncate在删除后自增列的变化 4 非空约束 5 唯一约束 6 默认约束 7 零填充约束(zerofill)
|
存储 算法 数据库
如何保证 ID 的全局唯一性?
如何保证 ID 的全局唯一性?
489 0
如何保证 ID 的全局唯一性?
|
JSON 关系型数据库 MySQL
MySQL数据类型与字段约束
MySQL数据类型与字段约束
1510 0