加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

Java Map底层实现思路

发布时间:2020-12-13 20:47:18 所属栏目:PHP教程 来源:网络整理
导读:pre name=code class=javapackage cn.com.commsoft.map;/** * * @author wengle *Java中规定,两个内容相同的对象 *(指的是通过调用equals方法返回true的对象),应当具有相等的hashcode *1、上面的话,相当于equals返回true的两个对象,就具有相同的hashco
<pre name="code" class="java">package cn.com.commsoft.map; /** * * @author wengle *Java中规定,两个内容相同的对象 *(指的是通过调用equals方法返回true的对象),应当具有相等的hashcode *1、上面的话,相当于equals返回true的两个对象,就具有相同的hashcode, *但是具有相同hashcode的对象,通过调用equals方法不1定返回true(Map就是1个例子) *2、重写了equals方法,就必须重写hashcode方法,为了保证上面的Java规定 */ public class MyMap { MyEntry[] arr = new MyEntry[100]; int size; /** * 采取hash算法实现map,(每一个对象都有1个地址, * 根据地址生成的1个hash码,由于每一个对象的地址都不1样,所以 * 生成的hash码是唯1的) * @param key * @param value */ public void put(Object key,Object value){ MyEntry my = new MyEntry(key,value); //相当于地址映照函数,但是会产生地址映照冲突 int a = (key.hashCode()%100); //思路1:当地址冲突时,采取开放地址法处理冲突 while(arr[a].key != null){ a++; } arr[a] = my; /*思路2:当地址冲突时,采取链表法处理冲突-->这也是Java采取的设计思想, 数组加链表(即每一个数组元素里面放1个链表)*/ //第1步:申请1个每一个元素是链表的数组 MapLinkedList[] map = new MapLinkedList[999]; //第2步:添加元素 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; } }



内容还会继续更新,敬请关注!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读