六月婷婷综合激情-六月婷婷综合-六月婷婷在线观看-六月婷婷在线-亚洲黄色在线网站-亚洲黄色在线观看网站

明輝手游網中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

Java編程思想讀書筆記(9.2章)

[摘要]4. 自己實現一個簡單的HashMap及其原理    4.1 在put()方法中:    1) 首先通過key得出要插入的key-valuepair的hashcode,并這個hashcode作為索引在數組bucket中找出key所對應的元素。    2) 把要插入的key-valuepair封裝成...
4. 自己實現一個簡單的HashMap及其原理

   4.1 在put()方法中:

   1) 首先通過key得出要插入的key-valuepair的hashcode,并這個hashcode作為索引在數組bucket中找出key所對應的元素。

   2) 把要插入的key-valuepair封裝成實現了Map.Entry接口的類的一個對象。

   3) 在操作1)所找出的數組元素(也是一個LinkedList)中查看是否有與要插入的key-valuepair的key相同的元素,如果有,則對之進行更新;如果無,則把要插入的key-valuepair數組元素中。

   4.2 在get()方法中

   1) 首先通過key得出要查找的key-valuepair的hashcode,并這個hashcode作為索引在數組bucket中找出key所對應的元素。

   2) 把要查找的key-valuepair的key封裝成實現了Map.Entry接口的類的一個對象。

   3) 在操作1)所找出的數組元素(也是一個LinkedList)中查看是否有與要插入的key-valuepair的key相同的元素,如果有,則返回key所對應的value;如果無,則返回一個null。

   4.3 一個實例

   import java.util.*;
   /**
   * MPair類實現了Map.Entry
   */
   class MPair
   implements Map.Entry, Comparable{
   Object key, value;
   MPair(Object k, Object v){
   key = k;
   value = v;
   }
   public Object getKey() { return key; }
   public Object getValue() { return value; }
   public Object setValue(Object v){
   Object result = value;
   value = v;
   return result;
   }
   /**
   * 當比較兩個MPair對象時,比較的是它們的key值
   */
   public boolean equals(Object o){
   return key.equals(((MPair)o).key);
   }
   public int compareTo(Object rv){
   return (((Comparable)key).compareTo(((MPair)rv).key));
   }
   }
   class SimpleHashMap extends AbstractMap{
   private final static int SZ = 997;
   private LinkedList[] bucket = new LinkedList[SZ];
   /**
   * 把key和value封裝成Map.Entry的實現類后插入到array中
   */
   public Object put(Object key, Object value){
   Object result = null;
   //通過key得到要插入的key-valuepair的hashcode
   int index = key.hashCode() % SZ;
   if(index < 0) index = - index;
   if(bucket[index] == null)

   bucket[index] = new LinkedList();
   //通過hashcode找出要插入的key所對應的array中的元素
   LinkedList pairs = bucket[index];
   //把要插入的key-valuepair封裝成MPair
   MPair pair = new MPair(key, value);
   ListIterator it = pairs.listIterator();
   boolean found = false;
   //檢查是否有與要插入的key相同的key存在,如果有,就對之進行更新
   while(it.hasNext()){
   Object iPair = it.next();
   if(iPair.equals(iPair)){
   result = ((MPair)iPair).getValue();
   it.set(pair);
   found = true;
   break;
   }
   }
   //如果無,則把新的key-valuepair插入
   if(!found)

   bucket[index].add(pair);
   return result;
   }
   public Object get(Object key){
   int index = key.hashCode() % SZ;
   if(index < 0) index = -index;
   if(bucket[index] == null) return null;
   LinkedList pairs = bucket[index];
   ListIterator it = pairs.listIterator();
   MPair match = new MPair(key, null);
   while(it.hasNext()){
   Object iPair = it.next();
   if(iPair.equals(match))

   return ((MPair)iPair).getValue();
   }
   return null;
   }
   public Set entrySet(){
   Set entries = new HashSet();
   for(int i=0; i
   if(bucket[i] == null) continue;
   Iterator it = bucket[i].iterator();
   while(it.hasNext())

   entries.add(it.next());
   }
   return entries;
   }
   }
   public class ExplicitStatic{
   public static void main(String[] args){
   SimpleHashMap m = new SimpleHashMap();
   for( int i=1; i<10; i++)

   m.put("km" + i, "m" + i);
   System.out.println(m);
   }
   }
   四. HashMap的一些其它討論

   1. 關于HashMap中的key值的使用

   1.1. 以Java的庫函數做為HashMap的key值時,可以直接使用。

   import java.util.*;
   class Counter{
   int i = 1;
   public String toString(){
   return Integer.toString(i);
   }
   }
   public class ExplicitStatic{
   public static void main(String[] args){
   HashMap hm = new HashMap();
   for(int i = 0; i < 10000; i++)

   {
   //HashMap的key的類型為Integer
   Integer r = new Integer((int) (Math.random() * 20));
   if(hm.containsKey(r))

   ((Counter)hm.get(r)).i++;

   else
   hm.put(r, new Counter());
   }
   System.out.println(hm);
   }
   }



主站蜘蛛池模板: 日韩国产欧美在线观看 | 婷婷在线综合 | 色五月天天 | 亚洲精品免费在线视频 | 中文字幕在线乱码免费毛片 | 色综合久久综合网观看 | 青春草在线 | 青娱乐在线视频观看 | 在线资源站 | 日韩精品欧美国产精品亚 | 性感美女香蕉视频 | 午夜三级黄色片 | 亚洲va久久久噜噜噜久久男同 | 在线天堂网 | 亚洲a级黄色 | 真实国产乱子伦精品一区二区三区 | 亚洲天堂手机在线 | 王者天下第五季在线观看 | 中文字幕一区婷婷久久 | 中文字幕不卡高清免费 | 亚洲欧美日韩激情在线观看 | 人人福利 | 视频二区欧美 | 青青影院在线播放免费 | 色老头久久久久 | 天天射天天干天天舔 | 青草草视频在线观看 | 深夜免费在线观看 | 午夜片在线观看 | 色老久久精品偷偷鲁一区 | 日本午夜在线视频 | 依人在线 | 日韩 欧美 中文 亚洲 高清 在线 | 中文在线免费视频 | 日韩在线视频网址 | 日本免费高清一区 | 特级做a爰片毛片免费看 | 午夜一级精品免费毛片 | 午夜精品久久久久久久99热下载 | 亚洲高清在线 | 香蕉app在线观看免费版 |