hashmap的简单实现_JAVA_编程开发_程序员俱乐部
hashmap的简单实现
- 摘要:来自ThinkingInJava【P493】。JavaCode1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859packageorg.vocano.java.tst;importjava.util.*;publicclassSimpleHashMap<K,V>extendsAbstractMap<K,V>
- 标签:has 实现 Map Hash
- 来自Thinking In Java【P493】。
?Java Code?
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
?
package?org.vocano.java.tst;
import?java.util.*;
public?class?SimpleHashMap<K,V>?extends?AbstractMap<K,V>?{
????//?Choose?a?prime?number?for?the?hash?table
????//?size,?to?achieve?a?uniform?distribution:
????static?final?int?SIZE?=?997;
????//?You?can't?have?a?physical?array?of?generics,
????//?but?you?can?upcast?to?one:
????@SuppressWarnings("unchecked")
????LinkedList<SimpleEntry<K,V>>[]?buckets?=
????????new?LinkedList[SIZE];
????public?V?put(K?key,?V?value)?{
????????V?oldValue?=?null;
????????int?index?=?Math.abs(key.hashCode())?%?SIZE;
????????if(buckets[index]?==?null)
????????????buckets[index]?=?new?LinkedList<SimpleEntry<K,V>>();
????????LinkedList<SimpleEntry<K,V>>?bucket?=?buckets[index];
????????SimpleEntry<K,V>?pair?=?new?SimpleEntry<K,V>(key,?value);
????????boolean?found?=?false;
????????ListIterator<SimpleEntry<K,V>>?it?=?bucket.listIterator();
????????while(it.hasNext())?{
????????????SimpleEntry<K,V>?iPair?=?it.next();
????????????if(iPair.getKey().equals(key))?{
????????????????oldValue?=?iPair.getValue();
????????????????it.set(pair);?//?Replace?old?with?new
????????????????found?=?true;
????????????????break;
????????????}
????????}
????????if(!found)
????????????buckets[index].add(pair);
????????return?oldValue;
????}
????public?V?get(Object?key)?{
????????int?index?=?Math.abs(key.hashCode())?%?SIZE;
????????if(buckets[index]?==?null)?return?null;
????????for(SimpleEntry<K,V>?iPair?:?buckets[index])
????????????if(iPair.getKey().equals(key))
????????????????return?iPair.getValue();
????????return?null;
????}
????public?Set<Map.Entry<K,V>>?entrySet()?{
????????Set<Map.Entry<K,V>>?set=?new?HashSet<Map.Entry<K,V>>();
????????for(LinkedList<SimpleEntry<K,V>>?bucket?:?buckets)?{
????????????if(bucket?==?null)?continue;
????????????for(SimpleEntry<K,V>?mpair?:?bucket)
????????????????set.add(mpair);
????????}
????????return?set;
????}
????public?static?void?main(String[]?args)?{
????????SimpleHashMap<String,String>?m?=
????????????new?SimpleHashMap<String,String>();
????????m.put("a",?"b");
????????System.out.println(m.get("a"));
????}
}?
?