Map数据结构以及Map相关方法的底层实现原理

  • 时间:
  • 浏览:3
  • 来源:跟我学网络

Map数据结构

Map也是容器的一种,那么我们以前看到的没一种容器,都有响应的数据结构,例如数组是一组连续的存储空间,链表是无序的,包含指针域和值域的容器。

这里我们要介绍的Map拥有自己独特的数据结构,Map的每一个元素叫做键值对,所谓键值对其实就是 “键” 和 “值” 组成的一对

Map的每一个元素由两部分组成,分别是

        key(键)和  value(值)

容器是用来装东西的,那么容器取得操作中肯定就少不了取东西,也就是查找,与数组和链表一样,Map在查找Map中的元素时,也有自己的规则,这里Map通过查找key(键)的方式,来获取相应的 value(值),并且 key 的值不可以重复,这一点与数组中的下表相似。

关于Map的数据结构简要介绍到这。

Map的操作方法底层实现原理

Map的底层实现基础是我们学过的数组和链表,因为Map的数据结构问题,Map中的各个元素之间没有连接的关系,所以通过数组的方式存储Map的每个元素。

当然 Map 既然是与数组和链表不同的容器,他自然也有自己的优点

Map 同其他容器一样,也有自己的增、删、改对应的操作,Map的新增方法叫做 put ,查找方法叫做 get,下面主要对这两种方法的实现进行介绍。

put方法:

put(Object key,Object value);

该方法中有两个参数,一个是 “键” 一个是 “值” ,在新增元素是,需要指定新元素的 key值 和 value值,并且只能在数组最后添加元素,下面是该方法的实现代码:

    class Map01{
            Object key;
            Object  value;
            public Map01(Object key,Object value){
                    this.key = key;
                    this.value = value;
            }
            Map01(){
                    
            }
    }        
    Map01 []myMap = new Map01[1000];
     int size;

红色代码是创建键值对需要的类和对象数组以及数组中 Map 对象的个数,很简单,不多介绍了,
    public void put(Object key,Object value){
             Map01 map = new Map01(key,value);
             myMap[size++] = map;
     } 

     那么 put 方法的实现也很简单,就是将新创建的map 对象设置为myMap数组的最后一个,之后让数组长度加一。

get方法的实现:

      get(Object key);

      我们说Map 是通过key 来找 value 值,所以在在get方法中需要传入key 值,实现代码如下:

    public Object get(Object key){
             for(int i=0;i<size;i++){
                     if(key.equals(myMap.key)){
                             return myMap.value;
                     }
             }
             return null;
     }
   通过对存储Map 对象的数组的遍历,找到key 值符合要求的key值,然后返回 value 值。