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 一个实例
- import java.util.*;
- /**
- * MPair类实现了Map.Entry
- */
- class MPair
- implements Map.Entry, Comparable{
- Object key, value;
- MPair(Object k, Object v){
- key = k;
- value = v;
- }
- public Object getKey() { return key; }
- public Object getValue() { return value; }
- public Object setValue(Object v){
- Object result = value;
- value = v;
- return result;
- }
- /**
- * 当比较两个MPair对象时,比较的是它们的key值
- */
- public boolean equals(Object o){
- return key.equals(((MPair)o).key);
- }
- public int compareTo(Object rv){
- return (((Comparable)key).compareTo(((MPair)rv).key));
- }
- }
- class SimpleHashMap extends AbstractMap{
- private final static int SZ = 997;
- private LinkedList[] bucket = new LinkedList[SZ];
- /**
- * 把key和value封装成Map.Entry的实现类后插入到array中
- */
- public Object put(Object key, Object value){
- Object result = null;
- //通过key得到要插入的key-value pair的hash code
- int index = key.hashCode() % SZ;
- if(index < 0) index = - index;
- if(bucket[index] == null)
- bucket[index] = new LinkedList();
- &nb
补充:软件开发 , Java ,