hashmap的简单实现_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > hashmap的简单实现

hashmap的简单实现

 2014/8/15 15:34:43  xmind  程序员俱乐部  我要评论(0)
  • 摘要:来自ThinkingInJava【P493】。JavaCode1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859packageorg.vocano.java.tst;importjava.util.*;publicclassSimpleHashMap<K,V>extendsAbstractMap<K,V>
  • 标签:has 实现 Map Hash
  1. 来自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"));
    ????}
    }?

    ?

发表评论
用户名: 匿名