Map的底层实现

 
package com.scxh.ex12testMap.myEntry;
public class MyEntry {
    private Object key;
    private Object value;
    
    public Object getKey() {
        return key;
    }
    public void setKey(Object key) {
        this.key = key;
    }
    public Object getValue() {
        return value;
    }
    public void setValue(Object value) {
        this.value = value;
    }
    
}
 
 
 
package com.scxh.ex12testMap.myEntry;
public class MyMap {
    private MyEntry[] entry;
    private  int size;//
    
    MyMap(){
        entry=new MyEntry[10];
    }
    public void put(Object key,Object value){
        boolean flag=false;
        for(int i=0;i<size;i++){    //
            MyEntry myEntry=entry[i];   //
            if(key.equals(myEntry.getKey())){//key
                flag=true;                  //flagtrue
                entry[i].setValue(value);   //ֵ
                break;
            }                       
        }   
        if(!flag){                      //flagfalse,sizekeyvalue
            MyEntry my=new MyEntry();   //keyvaluesize++
            my.setKey(key);
            my.setValue(value);
            
            entry[size]=my;
            size++;
        }
    }
    
    public  int size(){
        return size;
    }
    public MyEntry get(int index){
        return entry[index];
    }
    
    public static void main(String[] args) {
        MyMap map=new MyMap();
        map.put("1""11");
        map.put("2""22");
        map.put("3""33");
        map.put("4""44");
        map.put("4""55");
        for(int i=0;i<map.size();i++){
            MyEntry entry=map.get(i);
            System.out.println(entry.getKey()+"---"+entry.getValue());
        }
    }
}
 


unordered_map底层实现一般是基于哈希表(Hash Table)。哈希表是一种使用哈希函数将键映射到存储位置的数据结构。 在C++中,unordered_map是标准库中的一个关联容器,它提供了键值对的映射。它的底层实现使用了哈希表来实现快速查找和插入。 具体地说,unordered_map使用一个数来存储元素,这个数被称为桶(buckets)。每个桶中存放了一个链表或者红黑树,用来解决哈希冲突(不同的键对应相同的哈希值)的问题。 当插入一个键值对时,unordered_map首先会计算出键的哈希值,然后通过哈希函数将哈希值映射为桶的索引。如果该桶为空,就直接将键值对插入到这个桶中;如果桶中已经存在其他键值对,就使用键进行比较来判断是否已经存在相同的键,如果有相同的键,则更新对应的值;如果没有相同的键,则将新的键值对插入到链表或者红黑树中。 在查找一个键值对时,unordered_map首先计算出键的哈希值,并通过哈希函数找到对应的桶。然后在桶中进行搜索,如果是链表,则按顺序比较键值对的键;如果是红黑树,则使用树的搜索算法来查找。 哈希表的优点是可以在平均情况下实现常数时间的插入、删除和查找操作。然而,它的缺点是对内存的利用率相对较低,并且在最坏情况下,时间复杂度可能退化为O(n),其中n是存储的键值对的数量。 这就是unordered_map底层实现的简要介绍,它使用哈希表来实现快速查找和插入,并且处理了哈希冲突的情况。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值