Java Map底层实现思路

<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底层实现思路

相关文章:

你感兴趣的文章:

标签云: