Java Map底层实现思路
2015-04-30 17:16
429 查看
<pre name="code" class="java">package cn.com.commsoft.map; /** * * @author wengle *Java中规定,两个内容相同的对象 *(指的是通过调用equals方法返回true的对象),应该具有相等的hashcode *1、上面的话,相当于equals返回true的两个对象,就具有相同的hashcode, *但是具有相同hashcode的对象,通过调用equals方法不一定返回true(Map就是一个例子) *2、重写了equals方法,就必须重写hashcode方法,为了保证上面的Java规定 */ public class MyMap { MyEntry[] arr = new MyEntry[100]; int size; /** * 采用hash算法实现map,(每个对象都有一个地址, * 根据地址生成的一个hash码,由于每个对象的地址都不一样,所以 * 生成的hash码是唯一的) * @param key * @param value */ public void put(Object key, Object value){ MyEntry my = new MyEntry(key, value); //相当于地址映射函数,但是会产生地址映射冲突 int a = (key.hashCode()%100); //思路一:当地址冲突时,采用开放地址法处理冲突 while(arr[a].key != null){ a++; } arr[a] = my; /*思路二:当地址冲突时,采用链表法处理冲突-->这也是Java采用的设计思想, 数组加链表(即每个数组元素里面放一个链表)*/ //第一步:申请一个每个元素是链表的数组 MapLinkedList[] map = new MapLinkedList[999]; //第二步:添加元素 if(map[a] == null){ MapLinkedList list = new MapLinkedList(); list.add(e); map[a] = list; }else{ map[a].add(e); } } public Object get(Object key){ int a = (key.hashCode()%100); return arr[a].value; } } class MyEntry{ Object key; Object value; public MyEntry(Object key, Object value) { super(); this.key = key; this.value = value; } }
内容还会继续更新,敬请关注!
相关文章推荐
- Java实现对map或hashmap排序的三种方法或思路
- 自行实现Map底层结构(数组+链表) --Java版
- Java中常见数据结构:list与map -底层如何实现
- Java中常见数据结构:list与map -底层如何实现
- Java日记——将Map转为Model的底层实现
- Java Map的底层实现
- Java -- Map的底层实现
- Java中常见数据结构:list与map -底层如何实现
- Java中常见数据结构:Java容器 Collection与map -底层如何实现
- Java中常见数据结构:list与map -底层如何实现
- Java中常见数据结构:list与map -底层如何实现
- java Map实现的cache manager
- Java线程池及其底层源码实现分析
- java和c语言变长参数的底层实现区别
- Map实现java缓存机制的简单实例
- java集合LinkedList的底层实现源码详解
- 简单组合java.util.Map<K,V>实现Map<K,P,V>
- java实现缓存Map
- 排序算法的Java实现+思路(一):冒泡、快排
- [置顶] java使用数组实现简单的Map