HashMap底层原理(3)--- 自定义HashMap中的Entry对象

目录
-----第一章
----------为什么要深入学习HashMap?
----------HashMap与HashTable的区别是什么?
----------自定义HashMap中的Entry<K,V>类
----------使用ArrayList集合实现简易版HashMap
----------使用LinkedList链表实现简易版HashMap
----------HashCode和equals的区别
----------如何解决HashCode碰撞问题
----------纯手写HashMap中的put方法
----------纯手写HashMap中的get方法
-----第二章
----------HashSet基本API使用介绍
----------HashSet底层原理分析
----------HashMap底层基本实现原理分析
----------HashMap构造函数实现原理分析
----------HashMap第一次数组扩容原理
----------HashMapPut方法源码分析
-----第三章
----------HashMapJDK1.7面试题总结
----------HashMapJDK1.7扩容死循环原理分析
----------HashMapJDK1.8什么要使用红黑树
----------数据结构中时间复杂度对比
----------二叉搜索树基本实现原理与思想
----------手写二叉搜索树添加功能
----------手写二叉搜索树查询功能
----------总结二叉搜索查询存在哪些问题
-----第四章
----------二叉搜索树存在那些问题
----------红黑树的数据结构基本介绍
----------红黑树基本的特征介绍
----------红黑树变换颜色的规则要求
----------红黑树左右旋转基本的规则
----------手写红黑树环境代码实现
----------手写红黑树实现二叉树
----------红黑树规则破坏如何实现修复
-----第五章
----------手写红黑树左旋转代码演示
----------红黑树基本变色旋转规则回顾
----------纯手写一步一步写左旋转
----------红黑树基本左旋变颜色01
----------红黑树基本左旋变颜色02
----------红黑树基本左旋变颜色03
----------红黑树基本左旋变颜色04
----------红黑树查询左大值与最小值
-----第六章
----------HashMap8基本实现原理分析
----------HashMap8优化了7那些bug
----------HashMap8的Put方法实现原理01
----------HashMap8的Put方法实现原理02
----------HashMap8的Put方法扩容实现
----------HashMap8的Put方法源码分析总结

HashMap在不同JDK版本中的数据结构

JDK1.7 JDK1.8
结构 数组+链表 数组+链表+红黑树

数组+链表:
在这里插入图片描述
数组+链表+红黑树:在这里插入图片描述

自定义HashMap中的Entry<K,V>类

在定义Entry对象之前,我们首先要考虑Entry对象有哪些特点:
1、数据在HashMap中是以键值对的形式存在的,Entry对象是HashMap中用来存放数据的基本元素
2、使用者不需要去操作Entry对象,Entry对象对使用者是透明的
3、Entry类不依赖于其它类

从这些特点中我们可以知道
1、Entry类存在key,value属性
2、使用内部类
3、使用静态内部类

第一步:根据分析,首先定义一个Map接口,定义一些基本方法

public interface MytMap<K, V> {
    
    V put(K key, V value);

    V get(K key);

    interface Entry<K, V> {

        K getKey();

        V getValue();

    }
}

第二步:定义HashMap类,实现Map接口

public class MyHashMap<K, V> implements MyMap<K, V> {

    public V put(K key, V value) {
        return null;
    }

    public V get(K key) {
        return null;
    }

    static class Entry<K, V> implements MyMap.Entry<K, V> {
   
        private K k;

        private V v;
        
	    public Entry(K k, V v) {
            this.k = k;
            this.v = v;
        }
        public K getKey() {
            return this.k;
        }

        public V getValue() {
            return this.v;
        }
    }
}
发布了12 篇原创文章 · 获赞 2 · 访问量 318

猜你喜欢

转载自blog.csdn.net/qq_42972645/article/details/103971897