【java基础学习-2--】关于Hashcode()的使用
2015-08-23 10:05
731 查看
摘要
Java中equals()和hashCode()有一个契约:如果两个对象相等的话,它们的hash code必须相等;
但如果两个对象的hash code相等的话,这两个对象不一定相等;
这个约定直接导致了如下3个规则:
:无论你何时实现 equals 方法,你必须同时实现 hashCode 方法;
永远不要把哈希码误用作一个key;
在分布式应用中不要使用哈希码;
需要说明的是:关于规则2:《永远不要把哈希码误用作一个key》
==>也可以将哈希码作为key,但需要经过2步去处理:
对键采用hashCode()计算出来的值;==>这样可以找出哈希码相同,但是不相等对象的集合;
对这个集合使用键的equals()方法来进行线性查找,直到找到要找的对象;
测试程序1:(同时实现了equals()方法和Hashcode()方法)
package com.ll.hashcode;import java.util.HashMap;public class HashcodeTest { private String color; public HashcodeTest(String color) { this.color = color; } @SuppressWarnings("unchecked") public static void main(String[] args) { HashcodeTest a1 = new HashcodeTest("green"); HashcodeTest a2 = new HashcodeTest("red"); //hashMap stores apple type and its quantity HashMap m = new HashMap(); m.put(a1, 10); m.put(a2, 20); System.out.println(m.get(new HashcodeTest("green"))); } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((color == null) ? 0 : color.hashCode()); return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; HashcodeTest other = (HashcodeTest) obj; if (color == null) { if (other.color != null) return false; } else if (!color.equals(other.color)) return false; return true; }}结果:测试程序2(只实现了equals()方法,未实现Hashcode()方法)
package com.ll.hashcode;import java.util.HashMap;public class HashcodeTest { private String color; public HashcodeTest(String color) { this.color = color; } public boolean equals(Object obj) { if (!(obj instanceof HashcodeTest)) return false; if (obj == this) return true; return this.color.equals(((HashcodeTest) obj).color); } @SuppressWarnings("unchecked") public static void main(String[] args) { HashcodeTest a1 = new HashcodeTest("green"); HashcodeTest a2 = new HashcodeTest("red"); //hashMap stores apple type and its quantity HashMap m = new HashMap(); m.put(a1, 10); m.put(a2, 20); System.out.println(m.get(new HashcodeTest("green"))); }}结果:参考链接:
《Java中的equals()和hashCode()契约》:http://www.importnew.com/8701.html 《关于 hashCode() 你需要了解的 3 件事》:http://www.importnew.com/16517.html来自为知笔记(Wiz)
相关文章推荐
- FATAL ERROR in native method: JDWP No transports initialized, jvmtiError=AGENT_ERROR_TRANSPORT_INIT
- struts 2 标签 总结
- 页面提交错误,页面间参数传递java.lang.NumberFormatException: null
- java集合 之 Map集合
- Struts2学习(三)上传下载
- Java 反射:Class类,动态加载类获取方法和成员变量构造信息,方法反射的基本操作,集合泛型的本质
- Struts2整合Spring Hibernate的CRUD实例
- JAVA gc垃圾回收机制
- 使用 Intel HAXM 为eclipse安卓模拟器加速
- 深入分析 Java 中的中文编码问题
- Intellij IDEA工具Java web 环境搭建
- win7下jdk环境变量的配置
- 从零开始学java之IO流 使用字节流将多个相同格式的文本、视频、音乐写到一个文件中
- java-多线程3
- 从零开始学java之IO流 使用字节流好还是字符流好?
- [Java]Leetcode236 Lowest Common Ancestor of a Binary Tree
- Java设计模式(四) 装饰 代理模式
- 第二节:springmvc传值方式
- 【java】itoo项目实战之EJB中的RMI框架如何设计
- Java中的异常处理