微信商家收款 金融信贷 cordova cookies ip NEJ oracle显示所有数据库 录音棚设备一套多少钱 手机banner常用尺寸 windows查看进程命令 mysql新建数据库 python做界面 java教程 java删除目录 java游戏开发 coreldraw11 decimalformat 计算机网络自顶向下 网络文件服务器 批处理if 特战英雄辅助 俄罗斯方块代码 万能播放器电脑版 键盘指法练习游戏 氤氲之息哪里爆率高 qq空间自动点赞 linux解压 vue动态路由 sprutcam 财务报表软件免费版 发表评论 直播源 秘境森林 handlerthread 音频截取软件 动态数组 jsslice 键盘宏 网易云听歌识曲 汉印打印机
当前位置: 首页 > 学习教程  > 编程语言

手写简单的HashMap(jdk1.7)

2021/1/13 20:42:41 文章标签: 测试文章如有侵权请发送至邮箱809451989@qq.com投诉后文章立即删除

手写简单的HashMap&#xff08;jdk1.7&#xff09; public class MyHashMap<K, V> { //创建一个节点数组 private Entry1<K, V>[] table; private int size 0; //在创建对象的时候初始化数组的容量 public MyHashMap() {this.table new Entry1[8]; }//记录map集…

手写简单的HashMap(jdk1.7)

public class MyHashMap<K, V> {
//创建一个节点数组
private Entry1<K, V>[] table;
private int size = 0;

//在创建对象的时候初始化数组的容量
public MyHashMap() {
    this.table = new Entry1[8];
}

//记录map集合中元素的个数
public int size() {
    return size;
}

public V get(K key) {
    //根据key值计算出hash值
    int hash = key.hashCode();
    int index = hash % 8;
    //根据index直接找到entry数值对应的索引,循环遍历直到找到key值对应的value值  返回
    for (Entry1<K, V> entry = table[index]; entry != null; entry = entry.next) {
        if (entry.k.equals(key)) {
            return entry.v;
        }
    }
    return null;
}

public V put(K key, V value) {
    int hash = key.hashCode();
    int index = hash % 8;
    //这步的操作是:value值得覆盖操作
    for (Entry1<K, V> entry = table[index]; entry != null; entry = entry.next) {
        //如果key相同  直接覆原来的值,注意返回的值是被覆盖的value值
        if (entry.k.equals(key)) {
            V oldValue = entry.v;
            entry.v = value;
            return oldValue;
        }
    }
    addEntry(key, value, index);
    return null;
}

private void addEntry(K key, V value, int index) {
    **//首先创建一个新的节点,这个新的节点指向数组的节点
    //然后把这个新的节点赋值给数组的头结点
    //完成了jdk1.7  头插法  然后链表向下移动一位
    //  在jdk1.8之后  并不是采用的头插法  而是采用的尾插法**
    table[index] = new Entry1(key, value, table[index]); //jdk1.7时候的头插法
    size++;
}
//测试类
public static void main(String[] args) {
    MyHashMap<String, String> map = new MyHashMap<>();
    for (int i = 0; i < 20; i++) {
        map.put("蔡涛" + i, "1" + i);
    }
    System.out.println(map.size);
    System.out.println(map.get("蔡涛"));

}

}
//定义一个节点类
class Entry1<K, V> {
public K k;
public V v;
public Entry1<K, V> next;

public Entry1(K k, V v, Entry1<K, V> next) {
    this.k = k;
    this.v = v;
    this.next = next;
}

}


本文链接: http://www.dtmao.cc/news_show_600430.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?