zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    POJ 1251 Jungle Roads
    1111 Online Map (30 分)
    1122 Hamiltonian Cycle (25 分)
    POJ 2560 Freckles
    1087 All Roads Lead to Rome (30 分)
    1072 Gas Station (30 分)
    1018 Public Bike Management (30 分)
    1030 Travel Plan (30 分)
    22. bootstrap组件#巨幕和旋转图标
    3. Spring配置文件
  • 原文地址:https://www.cnblogs.com/lyz1995/p/7746499.html
Copyright © 2011-2022 走看看