频道栏目
首页 > 程序开发 > 软件开发 > Java > 正文
Java编程思想读书笔记-4(第9章-2HashMap的工作原理及其实现)
2009-06-13 00:05:38           
收藏   我要投稿

4.    自己实现一个简单的HashMap及其原理


4.1    在put()方法中:
1)    首先通过key得出要插入的key-value pair的hash code,并这个hash code作为索引在数组bucket中找出key所对应的元素。
2)    把要插入的key-value pair封装成实现了Map.Entry接口的类的一个对象。
3)    在操作1)所找出的数组元素(也是一个LinkedList)中查看是否有与要插入的key-value pair的key相同的元素,如果有,则对之进行更新;如果无,则把要插入的key-value pair数组元素中。
4.2    在get()方法中
1)    首先通过key得出要查找的key-value pair的hash code,并这个hash code作为索引在数组bucket中找出key所对应的元素。
2)    把要查找的key-value pair的key封装成实现了Map.Entry接口的类的一个对象。
3)    在操作1)所找出的数组元素(也是一个LinkedList)中查看是否有与要插入的key-value pair的key相同的元素,如果有,则返回key所对应的value;如果无,则返回一个null。
4.3    一个实例

  1. import java.util.*;
  2. /**
  3.  * MPair类实现了Map.Entry
  4.  */
  5. class MPair
  6.     implements Map.Entry, Comparable{
  7.     Object key, value;
  8.     MPair(Object k, Object v){
  9.         key = k;
  10.         value = v;
  11.     }
  12.     public Object getKey() { return key; }
  13.     public Object getValue() { return value; }
  14.     public Object setValue(Object v){
  15.         Object result = value;
  16.         value = v;
  17.         return result;
  18. }
  19.                 /**
  20.                   * 当比较两个MPair对象时,比较的是它们的key值
  21.                   */
  22.     public boolean equals(Object o){
  23.         return key.equals(((MPair)o).key);
  24.     }
  25.     public int compareTo(Object rv){
  26.         return (((Comparable)key).compareTo(((MPair)rv).key));
  27.     }
  28. }
  29. class SimpleHashMap extends AbstractMap{
  30.     private final static int SZ = 997;
  31.     private LinkedList[] bucket = new LinkedList[SZ];
  32.     /**
  33.      * 把key和value封装成Map.Entry的实现类后插入到array中
  34.      */
  35.     public Object put(Object key, Object value){
  36.         Object result = null;
  37.         //通过key得到要插入的key-value pair的hash code
  38.         int index = key.hashCode() % SZ;
  39.         if(index < 0) index = - index;
  40.         if(bucket[index] == null)
  41.             bucket[index] = new LinkedList();
  42.        &nb
点击复制链接 与好友分享!回本站首页
相关TAG标签 原理 思想 笔记
上一篇:Java编程思想读书笔记-3(第9章-1容器的使用及其工作原理)
下一篇:Java中static、this、super、final用法简谈(三)
相关文章
图文推荐
点击排行

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站