<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Vincent.Chan‘s Blog

    常用鏈接

    統計

    積分與排名

    網站

    最新評論

    [Jakarta Commons筆記] Commons Collections - Map組

    接下來看Map組。

     

    BidiMap

    MultiMap

    LazyMap

    MapUtils

     

    Commons Collectionsjava.util.Map的基礎上擴展了很多接口和類,比較有代表性的是BidiMapMultiMapLazyMap。跟BagBuffer類似,Commons Collections也提供了一個MapUtils

     

    所謂BidiMap,直譯就是雙向Map,可以通過key找到value,也可以通過value找到key,這在我們日常的代碼-名稱匹配的時候很方便:因為我們除了需要通過代碼找到名稱之外,往往也需要處理用戶輸入的名稱,然后獲取其代碼。需要注意的是BidiMap當中不光key不能重復,value也不可以。

     

    所謂MultiMap,就是說一個key不在是簡單的指向一個對象,而是一組對象,add()remove()的時候跟普通的Map無異,只是在get()時返回一個Collection,利用MultiMap,我們就可以很方便的往一個key上放數量不定的對象,也就實現了一對多。

     

    所謂LazyMap,意思就是這個Map中的鍵/值對一開始并不存在,當被調用到時才創建,這樣的解釋初聽上去是不是有點不可思議?這樣的LazyMap有用嗎?我們這樣來理解:我們需要一個Map,但是由于創建成員的方法很“重”(比如數據庫訪問),或者我們只有在調用get()時才知道如何創建,或者Map中出現的可能性很多很多,我們無法在get()之前添加所有可能出現的鍵/值對,或者任何其它解釋得通的原因,我們覺得沒有必要去初始化一個Map而又希望它可以在必要時自動處理數據生成的話,LazyMap就變得很有用了。

     

    我們還是通過一個具體的例子來說明:

     

    package sean.study.commons.collections;

     

    import java.util.Date;

    import java.util.HashMap;

    import java.util.Map;

     

    import org.apache.commons.collections.BidiMap;

    import org.apache.commons.collections.Factory;

    import org.apache.commons.collections.MultiHashMap;

    import org.apache.commons.collections.MultiMap;

    import org.apache.commons.collections.bidimap.DualHashBidiMap;

    import org.apache.commons.collections.map.LazyMap;

    import org.apache.commons.lang.StringUtils;

     

    public class MapUsage {

     

        public static void main(String[] args) {

            demoBidiMap();

            demoMultiMap();

            demoLazyMap();

        }

     

        public static void demoBidiMap() {

            System.out.println(StringUtils.center(" demoBidiMap ", 40, "="));

            BidiMap bidiMap = new DualHashBidiMap();

            bidiMap.put("BJ", "Beijing");

            bidiMap.put("SH", "Shanghai");

            bidiMap.put("GZ", "Guangzhou");

            bidiMap.put("CD", "Chengdu");

            System.out.println("Key-Value: BJ = " + bidiMap.get("BJ"));

            System.out.println("Value-Key: Chengdu = " + bidiMap.getKey("Chengdu"));

            System.out.println(StringUtils.repeat("=", 40));

        }

     

        public static void demoMultiMap() {

            System.out.println(StringUtils.center(" demoMultiMap ", 40, "="));

            MultiMap multiMap = new MultiHashMap();

            multiMap.put("Sean", "C/C++");

            multiMap.put("Sean", "OO");

            multiMap.put("Sean", "Java");

            multiMap.put("Sean", ".NET");

            multiMap.remove("Sean", "C/C++");

            System.out.println("Sean's skill set: " + multiMap.get("Sean"));

            System.out.println(StringUtils.repeat("=", 40));

        }

     

        public static void demoLazyMap() {

            System.out.println(StringUtils.center(" demoLazyMap ", 40, "="));

            // borrowed from Commons Collection's Javadoc

            Factory factory = new Factory() {

                public Object create() {

                    return new Date();

                }

            };

            Map lazy = LazyMap.decorate(new HashMap(), factory);

            System.out.println(lazy.get("NOW"));

            System.out.println(StringUtils.repeat("=", 40));

        }

     

    }

     

    以下是運行結果:

     

    ============= demoBidiMap ==============

    Key-Value: BJ = Beijing

    Value-Key: Chengdu = CD

    ========================================

    ============= demoMultiMap =============

    Sean's skill set: [OO, Java, .NET]

    ========================================

    ============= demoLazyMap ==============

    Wed Aug 03 12:44:56 CST 2005

    ========================================

     

    簡單說一下這個Factory,它是定義在org.apache.commons.collections包下面的一個接口,用于自定義對象的創建過程。這個有點像是后面我們要講的Transformer的簡化版本,但是也更直接也很好用,至少Commons Collections通過它向開發人員開放了一個可以方便控制對象創建細節的接口。

     

    posted on 2006-03-10 23:12 Vincent.Chen 閱讀(308) 評論(0)  編輯  收藏 所屬分類: Java

    主站蜘蛛池模板: 亚洲乱码日产精品一二三| 亚洲av片不卡无码久久| 免费一级毛suv好看的国产网站| 4399影视免费观看高清直播| 婷婷精品国产亚洲AV麻豆不片 | WWW国产成人免费观看视频| 国产美女无遮挡免费网站| 伊人久久五月丁香综合中文亚洲| 91在线视频免费看| 中文字幕在线观看亚洲日韩| 成年女人毛片免费播放人| 亚洲熟妇无码八V在线播放| 日本免费一区二区三区最新| 麻豆亚洲AV成人无码久久精品| 国产公开免费人成视频| 免费看一级一级人妻片 | 97视频免费在线| 亚洲 欧洲 自拍 另类 校园| 国产精品国产午夜免费福利看| 免费福利在线观看| 亚洲高清国产AV拍精品青青草原 | 中国人免费观看高清在线观看二区| 黑人大战亚洲人精品一区| 香蕉免费一区二区三区| 亚洲国产精品一区二区久| 日韩在线视频免费看| 国产裸体美女永久免费无遮挡 | 国产成人亚洲综合无码精品 | 成年大片免费视频播放一级| 亚洲日韩精品A∨片无码| 99爱在线观看免费完整版 | 色屁屁在线观看视频免费| 精品亚洲视频在线观看| 99re这里有免费视频精品| 亚洲欧洲av综合色无码| 亚洲中文字幕久久精品无码APP | 国产91精品一区二区麻豆亚洲| 无码av免费网站| 337P日本欧洲亚洲大胆艺术图| 久久精品7亚洲午夜a| 国产资源免费观看|