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 }