您的位置:首页 > 编程语言 > Java开发

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;
}

}



内容还会继续更新,敬请关注!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: