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 }
  • 相关阅读:
    让程序用自定义的菜单自定义菜单AVKON_VIEW,CBA,MENU_BAR,MENU_PANE
    symbian 菜单不显示的原因
    子类中调用父类的带参数的构造函数|子类构造函数调用父类构造函数 的说明
    symbian 设置 透明背景
    IOS App资源路径
    Nonblock I/O 及其使用
    CEikStatusPane MakeVisible kernexec 3错误
    把mapinfo图层的经纬度信息导出来的办法
    解决安装macports,不能更新的问题
    jpg结构解析
  • 原文地址:https://www.cnblogs.com/lyz1995/p/7746499.html
Copyright © 2011-2022 走看看