自己手动实现HashMap底层
2017-04-06 21:59
357 查看
手动实现HashMap底层代码
要注意的是:
HashMap的底层存储,使用的是数组存储数组中的每个元素是链表的地址
通过链表的地址找到所有Hash值相同元素
package com.ahut.map; import java.util.LinkedList; /** * 自己手动实现Map的底层,Map的底层实现 * 是由许多链表构成的数组,数组中的元素是链表的 * 开始节点,通过该节点能找到所有Hash值相同的元素 */ public class MyHashMap { LinkedList[] arr = new LinkedList[999];//链表数组 int size; //1.构造方法 public MyHashMap(){} //2.向Map中添加元素 public void put(Object key, Object value) { Node n = new Node(key, value); int hash = n.hashCode() % arr.length; hash = hash<0 ? -hash : hash; if(arr[hash] == null) {//如果该位置链表为空 LinkedList list = new LinkedList(); arr[hash] = list; list.add(n);//将要放入的节点n作为第一个节点放入 } else {//如果这个位置已经有链表了 LinkedList list = arr[hash];//取出该处的链表 //判断有没有键值key重复 for(int i=0; i<list.size(); i++) { Node temp = (Node) list.get(i); if(temp.key.equals(key)) {//如果该节点存在,覆盖掉 temp.value = value; } } arr[hash].add(n); } } //3.从Map中,用键去取数据 public Object get(Object key) { int hash = key.hashCode() % arr.length; hash = hash<0 ? -hash : hash; if(arr[hash] != null) { LinkedList list = arr[hash]; for(int i=0; i<list.size(); i++) { Node temp = (Node) list.get(i); if(temp.key.equals(key)) { return temp.value; } } } return null; } }
相关文章推荐
- 107-109_容器_自己实现HashMap_Map底层实现_哈希算法实现_使用数组和链表
- 在Linux 双机下自己手动实现浮动ip技术
- 在Linux 双机下自己手动实现浮动ip技术
- 自己手动实现KVO
- 【STL源码剖析读书笔记】自己实现queue之MyQueue(底层用MyList)
- 【STL源码剖析读书笔记】自己实现stack之MyStack(底层用MyList)
- HashSet 与HashMap底层实现
- Java源码---HashMap的底层实现
- java的HashCode equals == 以及hashMap底层实现深入理解
- HashMap的底层实现
- 【STL源码剖析读书笔记】自己实现Heap算法之MyHeap(底层容器用vector)
- 利用自定义泛型,自己简单实现HashMap
- HashMap的底层实现
- HashMap的底层实现
- 自己手动实现 KVO(来源:Glow 技术团队博客)
- 关于HashMap中的Hash算法和HashMap的自己的实现
- HashSet和HashMap的底层实现——哈希表、散列表
- HashMap底层实现原理的Java演示
- 实现自己的HashMap
- 【STL源码剖析读书笔记】自己实现Heap算法之MyHeap(底层容器用vector)