package thinkingInJava;

import java.util.HashMap;

/*
* 测试在向以hashcode为基础的集合(HashSet , HashMap , HashTable )中操作对象时,
* 该对象的equals方法和hashcode方法的影响
*
*/
class MapItem2 {
private String title ;
public MapItem2(String title ){
this.title = title ;
}
public void setTitle(String title ){
this.title = title ;
}
@Override
public int hashCode() {
return title.hashCode() ;
}
}
public class TestEqualsAndHashcode { public static void main(String[] args) {
// 向HashMap中添加对象
/*
* 1. 计算对象的hashcode
* 2. 根据计算的hashcode将对象存储进对应的数组中
* 3. 如果两个对象计算的hashcode相同,
* 再通过equals方法判断两个对象是不是相等。
* 如果equals方法返回true,这将已有对象覆盖掉。
* 否则执行下一步操作
* 4. 则将这两个对象存储在以该hashcode对应数组元素为头的链表上
*
*/
HashMap hm = new HashMap() ;
MapItem2 mi = new MapItem2("") ;
//System.out.println("HashMap object hashcode : " + mi.hashCode());
hm.put(hm, "xx") ; // 使用HashMap的get方法从HashMap中获取值
/*
* 1. 根据传递进来的对象计算其hash值,找到相应数组位置。
* 2. 通过equals方法判断数组位置上的值是否与该值相等。
* 3. 相等返回值,否则返回null。
*/
/*
* 测试: 使用对象的title属性的hashcode作为hashcode的返回值,
* 然后将对象put到Map中,然后将title改变,再从Map中取值
*/
HashMap hm2 = new HashMap() ;
MapItem2 mi2 = new MapItem2("xxx") ;
hm2.put(mi2 , "xxx") ;
mi2.setTitle("yyyy") ;// 重新设置title值后就无法再获取xxx值了,因为在get时计算的hash值变了
System.out.println(hm2.get(mi2)) ;
}
}

最新文章

  1. logback 常用配置详解<appender>
  2. PNG的使用技巧
  3. hiho一下十六周 RMQ-ST算法
  4. WebApi Put方法出现MethodNotAllowed解决方法
  5. Potocol Buffer详解
  6. 系统默认Select框 知多少
  7. 1103 POI2007 大都市meg
  8. Skew Join与Left Semi Join相关
  9. Unity扩展让枚举视图中变成多选框
  10. Python学习 常识+基础基础
  11. VS路宏 vc++于OutDir、ProjectDir、SolutionDir不同的路径
  12. JavaEE(18) - JPA原生SQL查询和存储过程
  13. for计算100以内的奇数和
  14. spark-submit参数说明--standalone
  15. RPC简介
  16. Java基础 【自动装箱和拆箱、面试题】
  17. ubuntu16 tomcat7安装和编码修改
  18. 自学安卓练习作品单词APP(1)-安卓的hello word与有道字典防爬虫破解
  19. POJ3690:Constellations(二维哈希)
  20. Vim 学习笔记二

热门文章

  1. js高级技巧之高级定时器
  2. hdu1863 最小生成树(prim)
  3. Codeforces Round #349
  4. BestCoder Round #72 (div.2)
  5. 看Ue4角色代码——跳跃与实现二段跳
  6. ps让文字的颜色变成图片的颜色
  7. BZOJ2981 : [Poi2002]括号
  8. Storm编译打包过程中遇到的一些问题及解决方法
  9. IE下margin:0 auto为什么不居中?
  10. 淘宝UED上关于chrome的transition闪烁问题的解决方案