java HashMap的简单实现
2015-10-23 17:01
567 查看
package com.other.test; import java.util.HashMap; /** * HashMap的简单实现 * @author txxs * */ public class MyOwnHashMap { /** * 取数组的大小为16 */ private static final int SIZE = 16; private Entry table[] = new Entry[SIZE]; /** * 我们要用key和value定义一个简单的Map数据结构 * 它还用在链表中的桶的冲突处理,如果多个键值对有 * 相同的hashcode,但是有不同的key,使用指针“next” */ class Entry { final String key; String value; Entry next; Entry(String k, String v) { key = k; value = v; } public String getValue() { return value; } public void setValue(String value) { this.value = value; } public String getKey() { return key; } } /**在我们自己实现的HashMap中根据key返回value, * 如果是没有和key对应的value返回空 */ public Entry get(String k) { int hash = k.hashCode() % SIZE; Entry e = table[hash]; //如果找到了对应的桶,那么就沿着链寻找看看与key对应的value是否存在 while(e != null) { if(e.key.equals(k)) { return e; } e = e.next; } return null; } /** * 在map中将特定的key和value关联起来。 * 如果包含了相同的key,原来的旧值将会被替换掉 */ public void put(String k, String v) { int hash=k.hashCode()%SIZE; Entry e=table[hash]; if(e!=null){ //检查是否有相同的key,如果有用新值代替旧值 while(e.next!=null){ if(e.key.equals(k)){ e.value=v; return ; } e=e.next; } //在链的末尾添加新的元素 Entry entryInOldBucket=new Entry(k,v); e.next=entryInOldBucket; } else{ //建立一个新桶 Entry entryInNewBucket=new Entry(k,v); table[hash]=entryInNewBucket; } } // 测试 public static void main(String[] args) { MyOwnHashMap tmhm = new MyOwnHashMap(); HashMap map = new HashMap(); map.put("Niranjan", "SMTS"); map.put("Ananth", "SSE"); map.put("Niranjan", "SMTS1"); map.put("Chandu", "SSE"); tmhm.put("Niranjan", "SMTS"); tmhm.put("Ananth", "SSE"); tmhm.put("Niranjan", "SMTS1"); tmhm.put("Chandu", "SSE"); //设置开始时间 long startTime = System.nanoTime(); Entry e = tmhm.get("Niranjan"); //设置结束时间 long endTime = System.nanoTime(); long duration = endTime - startTime; System.out.println("自己实现的HashMap " + duration); //设置开始时间 startTime = System.nanoTime(); String mapResult = (String) map.get("Niranjan"); //设置结束时间 endTime = System.nanoTime(); duration = endTime - startTime; System.out.println("原有的java.util.HashMap " + duration); System.out.println("自己实现的Map取值: "+e.getValue()); System.out.println("原有的java.util.HashMap取值: "+mapResult); } }
相关文章推荐
- Java_Ant详解
- Java多线程(二)synchronized wait notify
- Struts框架学习01
- power designer 提示Could not Initialize JavaVM! 的解决方法
- java中获取当前时间的字符串以及设置时间的格式
- 【JAVA】【SSH】【Initialization of bean failed】【AopConfigException】【BeanCreationException】
- Eclipse 查看源码
- MyEclipse下注释的快捷键
- java多线程 线程池
- java base64编码
- 在注入“sessionFactory”时提示java.lang.AbstractMethodError错误
- 解决 eclipse XXX cannot be read or is not a valid ZIP file
- springMVC对于controller处理方法返回值的可选类型
- struts2 与springmvc深入对比(二)
- windwos7+Eclipse+hadoop2.4.1开发等一系列问题的解决
- 通过jni例子来了解jni 实现机制
- Java的sleep、wait以及notify
- JavaWeb应用设置acton为默认页
- java,js断点调试
- 用spring mvc+mybatis+maven搭建项目骨架