Dict.CN 在線詞典, 英語學(xué)習(xí), 在線翻譯

          都市淘沙者

          荔枝FM Everyone can be host

          統(tǒng)計(jì)

          留言簿(23)

          積分與排名

          優(yōu)秀學(xué)習(xí)網(wǎng)站

          友情連接

          閱讀排行榜

          評(píng)論排行榜

          既有魚肉又有熊掌——ListOrderedMap

          要有序可以用List,要便于查找可以用Map,那既要有序又便于查找呢?

                  最近我就遇到了這樣一個(gè)問題,Java沒有給我們提供現(xiàn)成的類,我們完全可以自己開發(fā)個(gè)類繼承List和Map(Java原來就有不可以同時(shí)繼承List和Map的Bug,因此特意去看了下這個(gè)Bug的狀態(tài)——Closed,呵呵,應(yīng)該是很老的版本才有的問題,用新版本的朋友不用擔(dān)心會(huì)遇到這個(gè)問題),但是完全沒必要白花那個(gè)力氣,因?yàn)锳pache的Commons Collections的Jar包里已經(jīng)為我們提供了一個(gè)相當(dāng)完備的類來滿足我們這樣的要求完全是綽綽有余。因此我們現(xiàn)在要做的僅僅是引入Jar包,然后使用這個(gè)現(xiàn)成的好東西——ListOrderedMap就可以啦。

                   讓我們來看看代碼:

          ListOrderedMap list  =   new  ListOrderedMap();
          for ( int  i  =   0 ; i  <  objs.length; i ++ {
              list.put(objs[i].getId(), objs[i]);
          }

                  初始化很簡(jiǎn)單吧,沒有一點(diǎn)技術(shù)難度,往里邊放數(shù)據(jù)和Map沒一點(diǎn)區(qū)別,需要注意的是Map我們可以在初始化的時(shí)候加上類型,比如Map<String, String>,但是ListOrderedMap不可以,就這么點(diǎn)差別,要記得哦。但是這個(gè)差別也是ListOrderedMap讓人最不滿意的地方,因?yàn)檫@說明他是類型不安全的。

                  接下來,看看我們都用到了ListOrderedMap的哪些方法:

          int  themeId  =  ((Obj) list.getValue( 0 )).getThemeId();
          int  index  =  list.indexOf(key);
          if  (index  ==  list.size()  -   1 {
              obj
          =  (Obj) list.getValue( 0 );
          }
            else   if  (index  !=   - 1 {
              obj
          =  (Obj) list.getValue(index  +   1 );
          }

                  getValue(int index)直接根據(jù)Index取得Value,當(dāng)然也可以直接根據(jù)Index取得Key值,方法名可不是getKey(int index),而是直接get(int index)就可以啦。接著我們想取到當(dāng)前Key值后面一個(gè)Key值所對(duì)應(yīng)的Value,首先用indexOf(Object key)取得Index,然后計(jì)算其后面的Index再根據(jù)此Index取值。如果想取得當(dāng)前Key值后面一個(gè)Key值,則不必要先取Index,這么麻煩,ListOrderedMap里有直接的方法可以取得當(dāng)前Key值的前一個(gè)Key值和后一Key值,分別是previousKey(Object key)方法和nextKey(Object key)方法,返回null值表示到頭(或尾)了,或者沒有找到和當(dāng)前Key值匹配的Key值 。個(gè)至于這邊為什么要有If和Else if,原因很簡(jiǎn)單,和一般的索引一樣,返回值是-1就表示沒有找到。我們?cè)谶@里做了一個(gè)循環(huán),而且我的這個(gè)ListOrderedMap的數(shù)列是確保長(zhǎng)度大于0的,所以我把index==list.size()-1的判斷放在了前邊,如果不能確定長(zhǎng)度是否大于0,還是先判斷返回值是否為-1為好。

          話說多了容易糊涂,不如來個(gè)實(shí)例實(shí)在:

              /**
               * 根據(jù)用戶賬號(hào)查找其擁有的實(shí)時(shí)視頻列表
               * 
          @param account
               * 
          @return
               
          */

              
          public List findVideoList(String account) {
                          
                  List videolist 
          = new ArrayList();    
                  StringBuffer sqlsb 
          = new StringBuffer("");
                  sqlsb.append(
          " select username,videourl,cratedate from video v where v.customer_account ='");
                  sqlsb.append(account);
                  sqlsb.append(
          "");
                  
          try {    
                      videolist 
          = jdbcTemplate.queryForList(sqlsb.toString());            
                  }
           catch (DataAccessException e) {
                      
          return null;
                  }

                  
          return videolist;
              }

              
              
          //取list里面的每行紀(jì)錄中的username,createdate
              private void getVideoList(String account){        
                  
          int i= 0;
                  List list 
          = videoService.findVideoList(account);
                  
          if(list!=null && list.size()>0){
                      
          for(i=0;i<list.size();i++){
                          ListOrderedMap ob 
          = (ListOrderedMap)list.get(i);
                          
          if(ob!=null && ob.size()>0){                           
                              System.out.println(ob.getValue(
          0)+ob.getValue(2));                            
                          }

                      }

                  }

              }


           

                  本文只簡(jiǎn)單介紹了ListOrderedMap的幾種比較實(shí)用的方法,其他方法使用方法可以參考Apache網(wǎng)站上的相關(guān)API:http://commons.apache.org/collections/api-release/index.html

          posted on 2009-08-20 18:22 都市淘沙者 閱讀(905) 評(píng)論(0)  編輯  收藏 所屬分類: Java Basic/Lucene/開源資料

          主站蜘蛛池模板: 宜城市| 长武县| 青河县| 西城区| 襄垣县| 博客| 鸡东县| 紫云| 汶上县| 定襄县| 玉龙| 静乐县| 齐齐哈尔市| 盖州市| 鄱阳县| 重庆市| 平原县| 思茅市| 富平县| 罗江县| 遂平县| 隆回县| 建宁县| 广饶县| 车险| 简阳市| 台前县| 北宁市| 汉源县| 黄浦区| 郁南县| 长乐市| 汉阴县| 廊坊市| 仪陇县| 新河县| 黎川县| 遂溪县| 新宾| 汶上县| 黄石市|