1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114
| package cn.Map;
public class TestHashMap<k,V> { Node2[] table; int size; public TestHashMap() { table = new Node2[16]; } public V get(k key) { int hash = myHash(key.hashCode(), table.length); V value = null; if (table[hash]!=null) { Node2 temp = table[hash]; while (temp!=null) { if (temp.key.equals(key)) { value = (V)temp.value; break; }else { temp = temp.next; } } } return value; } public void put(k key,V value) { Node2 newNode = new Node2(); newNode.hash = myHash(key.hashCode(), table.length); newNode.key = key; newNode.value = value; newNode.next = null; Node2 temp = table[newNode.hash]; Node2 iterLast = null; boolean keyRepeat = false; if (temp==null) { table[newNode.hash] = newNode; size++; }else { while (temp!=null) { if (temp.key.equals(key)) { keyRepeat = true; temp.value = value; break; }else { iterLast = temp; temp = temp.next; } if (!keyRepeat) { iterLast.next = newNode; size++; } iterLast.next = newNode; } } } @Override public String toString() { StringBuilder sBuilder = new StringBuilder("{") ; for (int i = 0; i < table.length; i++) { Node2 temp = table[i]; while(temp!=null) { sBuilder.append(temp.key+":"+temp.value+","); temp = temp.next; } } sBuilder.setCharAt(sBuilder.length()-1, '}'); return sBuilder.toString(); } public static int myHash(int v,int length) {
return v&(length-1); } public static void main(String[] args) { TestHashMap<Integer,String> m = new TestHashMap(); m.put(10, "aa"); m.put(20, "bb");
System.out.println(m);
System.out.println(m.get(package cn.Map;
public class TestHashMap<k,V> { Node2[] table; int size; public TestHashMap() { table = new Node2[16]; } public V get(k key) { int hash = myHash(key.hashCode(), table.length); V value = null; if (table[hash]!=null) { Node2 temp = table[hash]; while (temp!=null) { if (temp.key.equals(key)) { value = (V)temp.value; break; }else { temp = temp.next; } } } return value; } public void put(k key,V value) { Node2 newNode = new Node2(); newNode.hash = myHash(key.hashCode(), table.length); newNode.key = key; newNode.value = value; newNode.next = null; Node2 temp = table[newNode.hash]; Node2 iterLast = null; boolean keyRepeat = false; if (temp==null) { table[newNode.hash] = newNode; size++; }else { while (temp!=null) { if (temp.key.equals(key)) { keyRepeat = true; temp.value = value; break; }else { iterLast = temp; temp = temp.next; } if (!keyRepeat) { iterLast.next = newNode; size++; } iterLast.next = newNode; } } } @Override public String toString() { StringBuilder sBuilder = new StringBuilder("{") ; for (int i = 0; i < table.length; i++) { Node2 temp = table[i]; while(temp!=null) { sBuilder.append(temp.key+":"+temp.value+","); temp = temp.next; } } sBuilder.setCharAt(sBuilder.length()-1, '}'); return sBuilder.toString(); } public static int myHash(int v,int length) {
return v&(length-1); } public static void main(String[] args) { TestHashMap<Integer,String> m = new TestHashMap(); m.put(10, "aa"); m.put(20, "bb");
System.out.println(m);
System.out.println(m.get(53)); } }
|