HashCode相关
来源:互联网 发布:软件许可管理 编辑:程序博客网 时间:2024/06/05 05:02
转帖,还是转帖
哈希码产生的依据:哈希码并不是完全唯一的,它是一种算法,让同一个类的对象按照自己不同的特征尽量的有不同的哈希码,但不表示不同的对象哈希码完全不同。也有相同的情况,看程序员如何写哈希码的算法。
下面给出几个常用的哈希码的算法。
1:Object类的hashCode.返回对象的内存地址经过处理后的结构,由于每个对象的内存地址都不一样,所以哈希码也不一样。
2:String类的hashCode.根据String类包含的字符串的内容,根据一种特殊算法返回哈希码,只要字符串内容相同,返回的哈希码也相同。
3:Integer类,返回的哈希码就是Integer对象里所包含的那个整数的数值,例如Integer i1=new Integer(100),i1.hashCode的值就是100 。由此可见,2个一样大小的Integer对象,返回的哈希码也一样。
类 HashMap<K,V>
java.lang.Object java.util.AbstractMap<K,V> java.util.HashMap<K,V>
- 类型参数:
K
- 此映射所维护的键的类型V
- 所映射值的类型- 基于哈希表的 Map 接口的实现。此实现提供所有可选的映射操作,并允许使用 null 值和null 键。(除了非同步和允许使用 null 之外,HashMap 类与 Hashtable 大致相同。)此类不保证映射的顺序,特别是它不保证该顺序恒久不变。
import java.util.HashMap;public class Test { //重写Equals不重写HashCode static class Key { private Integer id; private String value; public Key(Integer id, String value) { super(); this.id = id; this.value = value; } @Override public boolean equals(Object o) { if(o == null || !(o instanceof Key)) { return false; }else { return this.id.equals(((Key)o).id); } } } //重写Equals也重写HashCode static class Key_ { private Integer id; private String value; public Key_(Integer id, String value) { super(); this.id = id; this.value = value; } @Override public boolean equals(Object o) { if(o == null || !(o instanceof Key_)) { return false; }else { return this.id.equals(((Key_)o).id); } } @Override public int hashCode() { return id.hashCode(); } } public static void main(String[] args) { //test hashcode HashMap<Object, String> values = new HashMap<Object, String>(5); Test.Key key1 = new Test.Key(1, "one"); Test.Key key2 = new Test.Key(1, "one"); System.out.println(key1.equals(key2)); values.put(key1, "value 1"); System.out.println(values.get(key2)); Test.Key_ key_1 = new Test.Key_(1, "one"); Test.Key_ key_2 = new Test.Key_(1, "one"); System.out.println(key_1.equals(key_2)); System.out.println(key_1 == key_2); values.put(key_1, "value 1"); System.out.println(values.get(key_2)); }}
输出如下:
由上述例子可见:只重写了equasl方法的Key类 在用做Hash中的键值的时候 两个equasl为true的对象不能获取相应 的Value的而重写了hashCode方法和equals方法的key_类 两个相等的对象 可以获取同一个Value的,这样更符合生活中 的逻辑HashMap对象是根据Key的hashCode来获取对应的Vlaue 因而两个HashCode相同的对象可以获取同一个Value
0 0
- HashCode相关
- hashcode相关
- HashCode相关类容
- [JAVA] hashcode相关
- hashCode相关性能优化
- hashCode相关性能优化
- hashCode相关性能优化
- Java HashCode相关知识
- hashCode相关性能优化
- java -- hashcode相关的内容
- 关于Hashcode以及相关知识
- Java 中"=="、equals、hashcode相关
- 学习笔记04—HashCode相关
- 关于equals和hashCode的相关信息
- hashcode(),hashset(),hash(),hashMao()相关的知识点
- hashcode
- Hashcode
- hashCode()
- javascript学习二: 简单对象
- configure 命令详解
- Linux下cache参数的获取
- Android JNI (.so)库中与android共享第三方 (.so)库
- Java中的==和equals区别
- HashCode相关
- Hadoop学习笔记(一):MapReduce的输入格式
- Hadoop学习笔记(二):MapReduce的特性-计数器、排序
- 转帖-hadoop的JobId TaskId生成规则
- Hadoop学习笔记(三):Hive简介
- Hadoop学习笔记(四):HBase
- 将博客搬至CSDN
- 二分法查找
- Windows下zlib库和libPng库的编译和使用