让你秒懂HashMap的概念及其存取原理

HashMap可以理解为一个特殊的数组对象,它包含多个元素,并且每个数组元素都是一个键值对(称为Entry);
同时一个位置上还不止有一个键值对(这是诡异的地方);这是为啥呢?
这是因为hashMap的长度是有限的;
接下来问题就来了:
如果插入的键值对超过了长度怎么办?解决方法就是链表

具体是怎么玩的呢?
(为什么这么说活?
 因为java包括程序解决问题的方式是很生活化的,用你的生活经验就能理解和找到解决办法,所以思考程序就必须灵活开放
 最忌讳的就是死板,不敢想)

一.先看看怎么存:
①根据键值对的键算出hashcode;
②根据hashcode来决定将要添加的键值对放到哪个格子里面;
③如果格子里已经存在元素,就把新的键值对放到已经存在格子元素的链表中
按照这种逻辑封装的api叫put方法;


二.再看看怎么取:
也就是反过来,如何进行元素查找呢?
①先根据键获取hashcode;
②根据hashcode知道该元素存在那个格子里;
③进入该格子,对其中的元素的键逐个与参数键比较,找到键后,取到对应的值(叫hash值)就行了
按照这种逻辑封装的api叫get方法;

HashMap怎么用?
①创建一个空的map
  
    HashMap<String,String> map = new HashMap<String,String>();//精确键值对都是字符串

②调用用put/get来实现键值对的存和取

    a.put的用法:

(1)插入一个键值对到map中:map.put("apple",0);//在其中插入一个key为apple值为0的键值对
(2)获取该键值对的索引: int index = Hash("apple");//这样知道该元素在哪个格子里 


    b.get的用法:

(1)获取一个键对应的值:map.get("apple");
(2)获取该键值对的索引:int index = Hash("apple");
 

猜你喜欢

转载自blog.csdn.net/weixin_42204641/article/details/82841521