(转)Java中HashCode()方法
2009-07-03 17:42
381 查看
转自:http://topic.csdn.net/t/20060401/22/4656654.html
1.hashcode()到底是干什么用的?好像是和数据结构的hash表有关?java对象怎么会和hash表有关的?java中的对象都是存在一个hash表中吗?
当你的对象存储在HashSet,HashMap,HsahTable等以hash表为工作机制的容器的时候 你才需要关心这个函数,不是java中对象都是存在一个hash表里面
2.为什么a.equal(b)==true则必定a.hashcode()==b.hashcode()。equal代表内容,hashcode代表内存地址,难道我理解错了吗?
谁说equals是比较内容的,默认的equals 就是与 == 一样的效果
3.很多类都重写了hashcode,比如Integer.hashcode返回的是Integer的intValue。他们为什么要重写呢?
就是因为Integer重写了equals() 方法 ,所以要重写hsahCode(),以保证a.equals(b) 为true时候,有a==b;重写只要为了满足可能把Integer对象放到hash容器里面
4.有人说a.equal(b)==true则必定a.hashcode()==b.hashcode();反之
a.hashcode()==b.hashcode()则不一定a.equal(b)==true;
那奇怪了,hashcode岂不是毫无用处了?大家都用hashcode做什么呢?
用hsahCode()主要是支持hash容器的正确运行,hash容器根据hashCode决定对象的存储位置
hash容器速度比较快
1.hashcode()到底是干什么用的?好像是和数据结构的hash表有关?java对象怎么会和hash表有关的?java中的对象都是存在一个hash表中吗?
当你的对象存储在HashSet,HashMap,HsahTable等以hash表为工作机制的容器的时候 你才需要关心这个函数,不是java中对象都是存在一个hash表里面
2.为什么a.equal(b)==true则必定a.hashcode()==b.hashcode()。equal代表内容,hashcode代表内存地址,难道我理解错了吗?
谁说equals是比较内容的,默认的equals 就是与 == 一样的效果
3.很多类都重写了hashcode,比如Integer.hashcode返回的是Integer的intValue。他们为什么要重写呢?
就是因为Integer重写了equals() 方法 ,所以要重写hsahCode(),以保证a.equals(b) 为true时候,有a==b;重写只要为了满足可能把Integer对象放到hash容器里面
4.有人说a.equal(b)==true则必定a.hashcode()==b.hashcode();反之
a.hashcode()==b.hashcode()则不一定a.equal(b)==true;
那奇怪了,hashcode岂不是毫无用处了?大家都用hashcode做什么呢?
用hsahCode()主要是支持hash容器的正确运行,hash容器根据hashCode决定对象的存储位置
hash容器速度比较快
相关文章推荐
- JAVA中重写equals()方法的同时要重写hashcode()方法
- 了解java的hashcode方法
- JAVA hashCode()和equals()方法详解
- 浅谈Java中的hashcode方法
- Java中的equals()方法和hashcode()方法
- JAVA中重写equals()方法为什么要重写hashcode()方法说明
- java map 里面判断相等的hashcode方法
- 浅谈Java中的hashcode方法
- 浅谈Java中的hashcode方法
- 浅谈Java中的hashcode方法
- Java中的HashCode方法
- Java集合的排序和HashCode方法详解
- 聊聊java(六)equals()与hashCode()方法详解
- JAVA中的hashcode与equals方法
- Java中的hashcode()和equals()方法详解
- 黑马程序员-java面试--hashcode方法的作用
- Java中equals()与hashCode()方法完全解惑
- 浅谈Java中的hashcode方法
- 浅谈Java中的hashcode方法
- 你不知道的JAVA小知识——equals和hashCode方法