自行实现Map底层结构(数组+链表) --Java版
2016-07-19 10:36
441 查看
package Map; import Collection.TestLinkedList; /* * 自定义实现Map功能(底层:数组+链表) * Map:存放键值对,根据键找值 * 目的仅为更加了解该结构、编码部分不考虑细节 * 注意注释部分 * */ class Entry<K, V> { K Key; V Value; public Entry(K key, V value) { super(); Key = key; Value = value; } } public class RealizeMap<K, V, E> { @SuppressWarnings("unchecked") TestLinkedList<Entry<K, V>> arr[] = new TestLinkedList[165]; int size; RealizeMap() { size = 0; } public void put(K key, V value) { // 注意不能漏了->处理键值覆盖 Entry<K, V> e = new Entry<>(key, value); int hash = key.hashCode() % 165; if (arr[hash] == null) { TestLinkedList<Entry<K, V>> list = new TestLinkedList<>(); arr[hash] = list; list.addLast(e); }else { for(int i=0;i<arr[hash].size;i++) { Entry<K, V> E = arr[hash].get(i);//由于E在此取义为该链表键对应节点的地址,所以直接改E即可覆盖之 if(E.Key.equals(key)) { E.Value = value; return; } } arr[hash].addLast(e); } } public V get(K key) { int hash = key.hashCode(); if (arr[hash] != null) { for (int i = 0; i < arr[hash].size; i++) { if (arr[hash].get(i).Key.equals(key)) return arr[hash].get(i).Value; } } return null; } public static void main(String[] args) { RealizeMap<String, String, Entry<String, String>> map = new RealizeMap<>(); map.put("1", "张三"); map.put("2", "李四"); map.put("2", "黎明"); map.put("3", "王五"); map.put("4", "马六"); System.out.println(map.get("2")); } }
相关文章推荐
- Java BigDecimal详解
- JAVA中堆和栈的理解
- Java流结构
- eclipse JDK 版本错误
- Java静态变量思考
- SPRING中的线程池ThreadPoolTaskExecutor
- 将List转为Map 如List<javaBean>转为Map<String,javaBean>
- Java static静态类处理和MAP取键值
- reorder-list java
- Spring注入方式实现AOP
- Java 设计模式-单例
- 部门树状图用JAXB解决
- springmvc拦截器处理
- struts2工作原理
- Java--泛型的原理以及使用场景
- Spring+SpringMVC+Mybatis 多数据源整合
- spring mvc 创建 rest api
- Java并发编程 - 逐级深入 看线程的中断
- SpringMVC的Handler处理及url映射
- Thinking in Java之类内部变量定义先后顺序