手动实现一个HashMap的操作

2020-10-31  本文已影响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进去的呢?我现在的数据结构是一个数组。我是准备并排以一个地放在数组里边呢?还是有别的法子呢?发挥咱的想象力。

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");
    }
}
上一篇 下一篇

猜你喜欢

热点阅读