利用Array和LinkedList实现hashMap

import java.util.LinkedList;

public class MyHashMap {
    // hashMap 的底层结构就是 数组和链表
    LinkedList[] arr = new LinkedList[10];
    int size;

    public void put(Object key, Object value) {
    MyEntry entry = new MyEntry(key, value);
    int hash = key.hashCode();
    hash = hash < 0 ? -hash : hash;// 用来计算数组下标,保证为正数

    int a = hash % arr.length;//确保下标小于10
    // 没有出现hash冲突,直接保存
    if (arr[a] == null) {
        LinkedList<MyEntry> list = new LinkedList<MyEntry>();
        list.add(entry);
        arr[a]=list;
        size++;
    } else {
        LinkedList<MyEntry> list = arr[a];
        // 出现hash冲突,则遍历桶(这里的链表称为桶)
        for (MyEntry e : list) {
        // 如果出现了相同的key,则替换
        if (e.key.equals(key)) {
            e.value = value;
            break;
        } else {
            list.add(entry);
            size++;
        }
        }
    }
    }

    public Object get(Object key){
    //根据key的hash,计算出数组的下标
    int hash = key.hashCode();
    hash = hash < 0 ? -hash : hash;
    int a = hash % arr.length;

    LinkedList<MyEntry> list = arr[a];
    if(list != null){
        if(list.size()==1){
        return list.get(0).value;
        }else{
        for(MyEntry entry:list){
            if(entry.key.equals(key)){
            return entry.value;
            }
        }
        }
    }
    return null;
    }

    public static void main(String[] args) {
    MyHashMap map = new MyHashMap();
    map.put("aaa", "dingding");
    map.put("bbb", "chaochao");
    System.out.println(map.get("aaa"));
    System.out.println(map.get("bbb"));
    map.put("aaa", "duanduan");
    System.out.println(map.get("aaa"));
    }

}

[http://img.blog.csdn.net/20150516131644365](https://img-blog.csdn.net/20150516131644365)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值