java基础进阶篇:hashmap底层探究

JDK1.7版  底层使用 数组+链表实现

package com.company;

import java.util.HashMap;

/**
 * @author Vijay
 * @date 2020/4/28  -18:47
 */
public class MyHashMap<K,V> {


    private  Entry[]  table;  //定义数组,也就是哈希表
    private  static  final Integer CAPACITY=8;  //默认为数组长度为8  0-7
    private int size=0;  //map长度

        public MyHashMap()
        {
            this.table=new Entry[CAPACITY];//当map对象创建时,让数组为8个类型为Entry类型
        }
       public  Object get(Object key)
      {
        int i = key.hashCode();
        int index=i%8;
        for (Entry<K,V> entry=table[index] ;entry!=null;entry=entry.next) {
            if (entry.k.equals(key))
            {
                return  entry.v;
            }
        }
        return  null;
    }
      public  Object put(K key,V value)    //模仿map存值
      {
          int i = key.hashCode();  //用map的key获取hashcode  对8取余,获取数组下标位置
          int index=i%8;  
//用for循环判断新存的值是否与存入的值相同,相同就不替换,
for (Entry<K,V> entry=table[index] ;entry!=null;entry=entry.next) { 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) { Entry entry = new Entry<>(key, value, table[index]); table[index]=entry; size++;//元素加1 } public int size() {
//还回元素
return size; } public static void main(String[] args) { MyHashMap<String, String > map = new MyHashMap<>(); map.put("张三","sad"); map.put("李四","sads"); map.put("王五","sad2"); map.put("奥迪","sadd"); map.put("大蘇打","sad3"); } class Entry<K,V> { private K k; private V v; private Entry<K,V> next; public K getK() { return k; } public V getV() { return v; } public Entry<K, V> getNext() { return next; } public Entry(K k, V v, Entry<K, V> next) { this.k = k; this.v = v; this.next = next;//存下一个 } } }

猜你喜欢

转载自www.cnblogs.com/420ITboy/p/12797300.html