今天学习了一下map的原理,顺手写了一个小demo,模拟了map 存储的原理。文后附demo源码地址。不废话了,开始上代码:
首先,Map的 类图:
1: 首先有个map接口。因为是模拟嘛。我叫的 DemoMap ps:有种山寨的感觉呢哈哈。
package org.practive.demo.map;
//Map接口
import java.util.Map;
public interface DemoMap<K, V> {
int size();
boolean isEmpty();
boolean containsKey(Object key);
boolean containsValue(Object value);
V get(K key);
V put(K key, V value) throws Exception;
V remove(Object key);
void putAll(Map<? extends K, ? extends V> m);
boolean equals(Object obj);
int hashCode();
interface Entry<K, V> {
K getKey();
V getValue();
V setValue(V value);
boolean equals(Object o);
int hashCode();
}
}
2、接下来就是实现类了。我这里叫的是GeneralMap
package org.practive.demo.mapImpl;
import java.util.Map;
/*
* 模拟map存储K,V
* */
import org.practive.demo.map.DemoMap;
public class GeneralMap<K, V> implements DemoMap<K, V> {
private Object [][] obj;
private int index;
public GeneralMap(int length) {
obj = new Object[length][2];
}
@Override
public int size() {
// TODO Auto-generated method stub
return 0;
}
@Override
public boolean isEmpty() {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean containsKey(Object key) {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean containsValue(Object value) {
// TODO Auto-generated method stub
return false;
}
@Override
public V get(K key) {
for (int i = 0; i < index; i++) {
if (key.equals(obj[i][0])) {
return (V) obj[i][1];
}
}
return null;
}
@Override
public V put(K key, V value) throws Exception {
if (index >= obj.length) {
throw new Exception("index 越界了 长度为"+index);
}
obj[index++] = new Object[]{ key, value};
return null;
}
@Override
public String toString() {
StringBuilder stb = new StringBuilder();
stb.append("{");
for (int i = 0; i < index; i++) {
stb.append(obj[i][0].toString());
stb.append("=");
stb.append(obj[i][1].toString());
stb.lastIndexOf(obj[i][1].toString());
if (i<index) {
stb.append(",");
}
}
stb.append("}");
return stb.toString();
}
@Override
public V remove(Object key) {
// TODO Auto-generated method stub
return null;
}
@Override
public void putAll(Map<? extends K, ? extends V> m) {
// TODO Auto-generated method stub
}
}
3、接下来就是测试类:
public class Test {
public static void main(String[] args) throws Exception {
DemoMap<String,String> dmap = new GeneralMap(10);
dmap.put("a", "b");
dmap.put("b", "b");
dmap.put("c", "b");
dmap.put("d", "a");
System.out.println(dmap);
}
}
代码输出:
{a=b,b=b,c=b,d=a}
End:代码就到这里啦。今天临时写的代码,本人亲测可以调通,没有写注释。大家有什么疑问可以在下面留言。
代码托管在oschina 的git上面(dev分枝)点击打开
代码托管在oschina 的git上面(dev分枝)点击打开
代码托管在oschina 的git上面(dev分枝)点击打开
重要的话说三遍!!!!!