当前位置:编程学习 > JAVA >>

Java编程思想读书笔记-4(第9章-2HashMap的工作原理及其实现)

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
补充:软件开发 , Java ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,