• Java HashMap实现


     1 import java.util.ArrayList;
     2 import java.util.List;
     3 
     4 class Entry<K, V> {
     5     K key;
     6     V value;
     7 
     8     Entry(K key, V value) {
     9         this.key = key;
    10         this.value = value;
    11     }
    12 }
    13 
    14 public class Myhashmap<K, V> {
    15     private static final int DEFAULT_SIZE = 20;
    16     private int size = 0;
    17     public List<Entry<K, V>>[] array;
    18 
    19     public Myhashmap() {
    20         this.array = new List[DEFAULT_SIZE];
    21     }
    22 
    23     private int hash(K key) {
    24         int temp = key.hashCode();
    25         return (temp & 0x7FFFFFFF) % array.length;
    26     }
    27 
    28     public void put(K key, V value) {
    29         int indice = hash(key);
    30         if (array[indice] == null) {
    31             array[indice] = new ArrayList<Entry<K, V>>();
    32             array[indice].add(new Entry<K, V>(key, value));
    33             size++;
    34         } else {
    35             boolean find = false;
    36             for (Entry<K, V> e : array[indice]) {
    37                 if (e.key == key) {
    38                     e.value = value;
    39                     find = true;
    40                 }
    41             }
    42             if (!find) {
    43                 array[indice].add(new Entry<K, V>(key, value));
    44                 size++;
    45             }
    46         }
    47         if (size >= array.length / 2) {
    48             rehash();
    49         }
    50     }
    51 
    52     public V get(K key) {
    53         int indice = hash(key);
    54         if (array[indice] == null) {
    55             return null;
    56         }
    57         for (Entry<K, V> e : array[indice]) {
    58             if (e.key == key) {
    59                 return (V) e.value;
    60             }
    61         }
    62         return null;
    63     }
    64 
    65     public boolean containsKey(K key) {
    66         int indice = hash(key);
    67         if (array[indice] == null) {
    68             return false;
    69         }
    70         for (Entry<K, V> e : array[indice]) {
    71             if (e.key == key) {
    72                 return true;
    73             }
    74         }
    75         return false;
    76     }
    77 
    78     public int size() {
    79         return size;
    80     }
    81 
    82     public boolean isEmpty() {
    83         return size == 0;
    84     }
    85 
    86     private void rehash() {
    87         List<Entry<K, V>>[] cur = new List[2 * array.length];
    88         for (int i = 0; i < array.length; i++) {
    89             cur[i] = array[i];
    90         }
    91         array = cur;
    92     }
    93 }
  • 相关阅读:
    JS——几种数组遍历方式总结
    JS——获取浏览器地址栏中的参数
    JQuery——JQuery CSS 选择器
    Maven 配置 本地骨架创建工程
    在SpringBoot中的SpringSecurity的配置类中,http.permitAll()与web.ignoring()的区别
    spring-task定时任务动态配置修改执行时间
    常用加密工具类
    thinkphp3.2 验证码的生成和校验,以及遇到的一些问题
    js 倒计时Demo
    PHP递归函数详解
  • 原文地址:https://www.cnblogs.com/lyz1995/p/7746499.html
Copyright © 2020-2023  润新知