美文网首页
手动实现一个HashMap的操作

手动实现一个HashMap的操作

作者: 大雨滂沱在关外 | 来源:发表于2020-10-31 10:24 被阅读0次

首先的一件事情是,咱应该知道是一开始map是一个数组。数组的数据不够放的时候,它会成为一个链表,然后链表太长的时候会转换成为一个二叉树。大概就知道这些吧。接下来就愉快的写代码吧。

import java.io.Serializable;
import java.util.Set;
/*
 * @author zhangxiaomin
 * @email 1396729865@qq.com
 */
// 数组+链表+红黑树
public class CustomHashMap<K,V> implements Serializable{
    private static final long serialVersionUID=1L;
    private static int initialCapacity = 16;
    private static float loadFactor = 0.75f;
    private static Node[] nodes = new Node[initialCapacity];
    private volatile int size = 0;
    public int size(){return this.size;}
    @Override public int hashCode() {return super.hashCode();}
    @Override public boolean equals(Object obj) {return super.equals(obj);}
    public static class Node<K,V>{
        final K key = null;
        V value;
        public Node(K key,V value){}
        @Override public String toString() {return super.toString();}
        @Override public boolean equals(Object obj) {return super.equals(obj);}
    }
}

接下来,写一个构造器。

    private static Node[] nodes = new Node[initialCapacity];

这行代码是几个意思,加载类的时候创建一个静态的node数组。我的天呐。这怕是石乐志吧。去掉这行代码。

// 数组+链表+红黑树
public class CustomHashMap<K,V> implements Serializable{
    private static final long serialVersionUID=1L;

    private static final int DEFAULT_INITIALCAPACITY = 16;
    private static final float DEFAULT_LOADFACTOR = 0.75f;

    private volatile int size = 0;
    public int size(){return this.size;}
    public Node[] nodes = {};
    @Override public int hashCode() {return super.hashCode();}
    @Override public boolean equals(Object obj) {return super.equals(obj);}
    public static class Node<K,V>{
        final K key = null;
        V value;
        public Node(K key,V value){}
        @Override public String toString() {return super.toString();}
        @Override public boolean equals(Object obj) {return super.equals(obj);}
    }
    public CustomHashMap(int initialCapacity){
        this.nodes = new Node[initialCapacity];
    }
    public CustomHashMap(){
        this(DEFAULT_INITIALCAPACITY);
    }
}

继续往下写,毋庸置疑我需要写个get和put方法了。

    public void put(K key,V v){
        
    }
    public V get(K key){
          return null;
    }

那么现在就需要想一想了,我这个元素是怎么给put进去的呢?我现在的数据结构是一个数组。我是准备并排以一个地放在数组里边呢?还是有别的法子呢?发挥咱的想象力。

  • 第一点,就目前而言咱家写了一个数组
  • 第二点,咱家写了一个通过key去获取元素的get方法。
    通过数组获取元素只有一种方法嘛,就是下标呗,那么我现在明确一下,我需要做的事情是建立key和数组下标的关系。
public class Test{
    public static void main(String[] args) {
        CustomHashMap.Node<String,Object> node = new CustomHashMap.Node<>("hello","world");
        System.out.println(node);
        System.out.println("hello world");
    }
}

相关文章

  • 手动实现一个HashMap的操作

    首先的一件事情是,咱应该知道是一开始map是一个数组。数组的数据不够放的时候,它会成为一个链表,然后链表太长的时候...

  • HashMap源码分析

    HashMap HashMap概述 HashMap基于哈希表的 Map 接口的实现。此实现提供所有可选的映射操作,...

  • LinkedHashMap原理分析

    目录 put操作 remove操作 lru缓存实现 put操作 LinkedHashMap继承HashMap, 大...

  • 【源码笔记】 HashMap 的实现原理

    1 HashMap 概述 HashMap 是基于哈希表的 Map 接口的非同步实现。此实现提供所有可选的映射操作,...

  • Java集合HashMap源码剖析

    一、HashMap概述 HashMap基于哈希表的 Map 接口的实现。此实现提供所有可选的映射操作,并允许使用 ...

  • JDK源码分析(3)HashMap

    JDK版本 HashMap简介 HashMap基于哈希表的 Map 接口的实现。此实现提供所有可选的映射操作,并允...

  • HashMap底层实现原理

    HashMap概述 HashMap实现了Map接口,我们常用HashMap进行put和get操作读存键值对数据。下...

  • HashMap底层实现原理

    HashMap概述 HashMap实现了Map接口,我们常用HashMap进行put和get操作读存键值对数据。下...

  • HashMap面试题:90%的人回答不上来

    我们希望候选者具有手动实现HashMap的能力;研究过JDK中HashMap的源代码,以及不同版本JDK中使用的优...

  • HashMap的介绍和源码解析

    HashMap的介绍 1、HashMap的简介 基于哈希表的 Map 接口的实现。此实现提供所有可选的映射操作,并...

网友评论

      本文标题:手动实现一个HashMap的操作

      本文链接:https://www.haomeiwen.com/subject/ljhsvktx.html