`
jaesonchen
  • 浏览: 313308 次
  • 来自: ...
社区版块
存档分类
最新评论

覆写equals 方法时,一定要记着覆写hashCode 方法。

 
阅读更多
//当你覆写equals 方法时,一定要记着覆写hashCode 方法。
//否则类与基于hashCode的集合类一起正确使用时,会出现不可预期的行为。
//为了避免在覆盖override时错误的进行了重载overload,应该始终在覆盖的方法前加上@Override。
Set<Name> s = new HashSet<Name>();
s.add(new Name("Mickey", "Mouse"));
System.out.println(s.contains(new Name("Mickey", "Mouse")));	//false

class Name {
	protected String first, last;
	public Name(String first, String last) {
		this.first = first;
		this.last = last;
	}
	@Override public boolean equals(Object o) {
		if (!(o instanceof Name))
			return false;
		Name n = (Name)o;
		return n.first.equals(first) && n.last.equals(last);
	}
	/*
	@Override public int hashCode() {
		return 37 * first.hashCode() + last.hashCode();
	}*/
}

 

 

分享到:
评论

相关推荐

    Java重写equals及hashcode方法流程解析

    "Java重写equals及hashcode方法流程解析" Java中的equals和hashCode方法是两个非常重要的方法,它们都是Object...同时,我们还需要注意到,重写equals方法时,必须重写hashCode方法,以便于确保对象的正确性和一致性。

    高级开发人员面试宝典之各种面试题以及点评.docx

    * 覆写 hashcode 方法,需要把某个非零常数值,例如 17,保存在 int 变量 result 中。 * 对于对象中每一个关键域 f(指 equals 方法中考虑的每一个域): + 对于 boolean 型,计算(f? 0 : 1)。 + 对于 byte,char,...

    提高代码质量的方法.

    - 覆写equals方法时要处理null值,同时覆写hashcode以保持一致性。 - 推荐覆写toString方法,提供更友好的输出。 - 使用package-info.java为包提供元数据。 4. **字符串操作**: - 使用字符串直接量赋值,提高...

    Java开发军规.docx

    当覆写对象的equals()方法时必须同时覆写hashCode()方法。equals和hashCode方法是对象在hash容器内高效工作的基础,正确的覆写这两个方法才能保证在hash容器内查找对象的正确性。 遵循这些军规可以确保Java开发的...

    Java2全方位讲议(内部讲议)9

    2. **覆写 hashCode 方法**:为了确保相等的对象有相同的哈希码,你需要在重写 `equals` 方法的同时,也重写 `hashCode` 方法。可以参考包装类(Wrapper Classes)中的实现。 **对象的复制** 1. **Object 类的 ...

    Effective Java第三版1

    1. **覆写equals时遵守通用规定**:重写`equals()`时,应遵循“ Reflexive、Symmetric、Transitive、Consistency 和 Non-null”五原则,同时必须与`hashCode()`一起覆写。 2. **覆写hashCode**:确保相等的对象有...

    Java 编程军规.docx

    #### 军规八:覆写equals()方法时同时覆写hashCode() - **解释**:当一个对象的equals()方法被覆写后,如果没有同时覆写hashCode()方法,可能会导致该对象在哈希表中的行为不符合预期。 - **实践建议**:确保equals...

    华为java编程军规

    军规八:覆写对象的 equals() 方法时必须同时覆写 hashCode() 方法。这是因为当对象被添加到集合中时,需要使用 hashCode() 方法来判断对象的唯一性。 军规九:禁止循环中创建新线程,尽量使用线程池。这是因为循环...

    java学习笔记(二)

    覆写`equals`方法是为了比较两个对象是否相等,通常在重写`equals`时,也需要考虑覆写`hashCode`方法以保持一致性。 总的来说,本篇笔记涵盖了Java面向对象编程的基础知识,包括类和对象的定义、方法的创建、对象的...

    [计算机软件及应用]Java开发规范.doc

    当重写`equals`方法时,务必同时重写`hashCode`方法,以保持对象一致性,这对于集合框架尤其重要。 **2.2.6 懒加载对象** 懒加载对象时,不推荐使用双检查锁定(Double-Checked Locking)模式,因为这可能在多线程...

    通过Lombok来简化你的代码1

    Lombok是一款java库,主要用来简化java代码的编写,通过使用注解,可以减少大量的getter、setter、equals、hashCode、toString等方法的编写,从而提高开发效率。 安装Lombok 要使用Lombok,需要先安装Lombok插件。...

    Java程序的三十个基本规则

    23. **使用equals()与hashCode()**:正确覆写equals()和hashCode()方法,确保对象比较的一致性。 24. **代码复用**:合理使用方法重载和方法抽取,避免代码冗余。 25. **类型检查**:在必要时进行类型转换,避免...

    java集合相关学习.pdf

    为了优化Map的性能,对象在作为键使用时,通常需要覆写hashCode()和equals()方法,确保当两个键被视为相等时,它们的哈希码也相同。 总结,Java集合框架为开发者提供了灵活的数据组织方式,无论是在简单的数据管理...

    Java源码分析:集合-容器.pdf

    为了保证元素的唯一性,存储在HashSet中的对象必须正确地覆写hashCode和equals方法。TreeSet利用二叉树的原理对元素进行排序,它可以将元素按照指定的顺序进行排序。如果需要对自定义对象进行排序,则要求该对象必须...

    java集合详解

    为了在HashMap中高效地定位键值对,键对象需要覆写hashCode()方法,确保不同的键返回不同的哈希值,减少冲突。 1.5 SET Set接口继承自Collection,不允许重复元素,如HashSet和TreeSet是其典型实现。Set接口的实现...

    Java集合排序及java集合类详解(Collection、List、Map、Set).pdf

    - **覆写hashCode()**:为了确保键的唯一性,当使用自定义对象作为键时,需要重写equals()和hashCode()方法。 5. **Set** - Set接口不包含重复元素,且不保证元素顺序。 - **实现原理**:HashSet是最常见的Set...

    JAVA程序员面试题(含有答案)经典版

    依靠 hashCode() 和 equals() 方法完成,使用的是 equals() 方法。== 属于地址值比较,而 equals() 属于内容比较。 16. 列举出一些常见到的 runtime exception: NullPointerException、ClassCastException、...

    程序员32问程序员32问

    如果想要自定义元素的相等性,可以在覆盖equals()方法的同时,也覆盖hashCode()方法以保持一致性。 以上是对标题和描述中提到的知识点的详细说明。这些知识点涵盖了Java编程语言的基础概念和技术细节,对于初学者和...

Global site tag (gtag.js) - Google Analytics