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

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

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

    lotusswan

      BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
      11 Posts :: 0 Stories :: 4 Comments :: 0 Trackbacks
    Java 5.0中最大的特性是引入了泛型,而引入泛型影響最大的就是幾個集合類。前一次我簡要記錄了一下學習List的筆記,本次我將概要地描述一下泛型在集合中的其他應用。
    1.指定一個類型參數
    一個類型參數主要針對List、Set等集合類而言,具體處理和List大同小異,不再贅述。
    2.指定兩個類型參數
    兩個類型參數主要針對Map集合類。Map類會存儲一對元素:鍵-值對,自然就會對應著兩種類型。通List一樣,使用Map時只需要指定參數類型就可以了,不同之處在于需同時指定鍵類型和值類型:
    ??????? Map<String, String> map = new HashMap<String, String>();
    如果理解了泛型的核心概念:所謂參數類型,不過是占位符而已;那么使用一個類型參數還是兩個類型參數其實沒有任何差別。
    3.使用Iterator
    如果集合類使用了類型參數,則定義相應的迭代器時也必須指定類型參數,例如:
    ??????? Map<Integer, String> map = new TreeMap<Integer, String>();
    ????????Interator iter = map.keySet().iterator();
    上面的語句就是無法編譯的,因為Iterator和Map不配套;不過,反過來,如果集合類沒有使用類型參數,而Iterator使用了類型參數,這種情況是允許的,之所以這樣,主要是為了方便,省掉獲取元素必須進行映射的步驟。例如下面的語句:
    ??????? Map map = new TreeMap();
    ????????Interator<Integer> iter = map.keySet().iterator();
    則是合法的,不過建議你別這么做,否則你是自找麻煩。因為對于下面的語句:
    Map?map? = ? new ?HashMap();
    ????????map.put(
    " zero " ,? " class?1 "
    );
    ????????map.put(
    1 ,? " class?2 "
    );
    ????????map.put(
    " two " ,? " class?3 "
    );
    ????????map.put(
    " three " ,? " class?4 "
    );
    ????????map.put(
    " four " ,? 3
    );
    ????????
    ????????Iterator
    < String > ?iter? =
    ?map.keySet().iterator();????
    ????????
    while (iter.hasNext())?
    {
    ????????????System.out.println(iter.next());
    ????????}
    你能期望得到什么?上面的語句編譯時不會出錯,不過運行時可能讓你大吃一驚。所以為了減少運行時出錯的可能,建議你盡量使用參數化類型。
    4.函數形參參數類型化
    我們也可以指定函數形參的參數類型,例如:
    private ? void ?printListOfStrings(List < String > ?list,?PrintStream?out)? throws ?IOException? {
    ???????
    for ?(Iterator < String > ?i? = ?list.iterator(?);?i.hasNext(?);?)?
    {
    ???????out.println(i.next(?));
    ???????}

    ?????}
    5.返回值參數類型化
    除了可以使用集合體時采用參數化類型,返回值也可以采用參數類型化,例如:
    private ?List < String > ?getListOfStrings(?)? {
    ????????List
    < String > ?list? = ? new ?LinkedList < String >
    ();
    ????????list.add(
    " Hello "
    );
    ????????
    return
    ?list;
    ??????}
    總之,引入泛型的目的就是為了減少編程時的錯誤,盡量將錯誤在編譯時就發現,而不是遺留到運行時,所以我們應該盡可能地運用好泛型這一強大的工具提高我們的編程能力。下面以一個很粗糙的例子作為本文的終結:
    package ?com.jiang.tiger.chap1;

    import
    ?java.util.ArrayList;
    import
    ?java.util.Collection;
    import
    ?java.util.Iterator;
    import
    ?java.util.List;
    import
    ?java.util.Map;
    import
    ?java.util.HashMap;
    import
    ?java.util.Set;
    import
    ?java.util.TreeMap;

    public ? class ?IteratorTester?
    {
    ????
    public ? static ?Map?MapInitial(Class?type)?
    {
    ????????Map
    < Integer,?String > ?map? = ? null
    ;
    ????????
    try ?
    {
    ????????????map?
    = ?(Map < Integer,?String >
    )?type.newInstance();
    ????????????map.put(
    0 ,? " class?1 "
    );
    ????????????map.put(
    1 ,? " class?2 "
    );
    ????????????map.put(
    2 ,? " class?3 "
    );
    ????????????map.put(
    3 ,? " class?4 "
    );
    ????????????map.put(
    4 ,? " calss?4 "
    );
    ????????}
    ? catch ?(InstantiationException?e)? {
    ????????????
    // ?TODO?自動生成?catch?塊

    ????????????e.printStackTrace();
    ????????}
    ? catch ?(IllegalAccessException?e)? {
    ????????????
    // ?TODO?自動生成?catch?塊

    ????????????e.printStackTrace();
    ????????}

    ????????
    return ?map;
    ????}

    ????
    ????
    public ? static ? void ?CollectionIterator()? {
    ????????Map
    < Integer,?String > ?map? = ?MapInitial(( new ?HashMap < Integer,?String >
    ()).getClass());
    ????????Collection
    < String > ?list? =
    ?map.values();
    ????????Iterator
    < String > ?iter? =
    ?list.iterator();
    ????????
    ????????
    while (iter.hasNext())?
    {
    ????????????System.out.println(iter.next());
    ????????}

    ?????}

    ????
    ????
    public ? static ? void ?ListIterator()? {
    ????????Map
    < Integer,?String > ?map? = ?MapInitial(( new ?TreeMap < Integer,?String >
    ()).getClass());
    ????????List
    < String > ?list? = ? new ?ArrayList < String >
    ();
    ????????Set
    < Integer > ?set? =
    ?map.keySet();
    ????????Iterator
    < Integer > ?iter? =
    ?set.iterator();
    ????????
    ????????
    while (iter.hasNext())?
    {
    ????????????list.add(map.get(iter.next()));
    ????????}

    ????????
    ????????Iterator
    < String > ?iterator? = ?list.iterator();
    ????????
    while (iterator.hasNext())?
    {
    ????????????System.out.println(iterator.next());
    ????????}

    ????}

    ????
    ????
    public ? static ? void ?main(String[]?args) {
    ????????CollectionIterator();
    ????????ListIterator();
    ????}

    }

    上面程序的運行結果如下所示:
    class? 3
    calss?
    4
    class?
    2
    class?
    4
    class?
    1
    class?
    1
    class?
    2
    class?
    3
    class?
    4
    calss?
    4
    posted on 2006-12-04 21:50 lotusswan 閱讀(1221) 評論(0)  編輯  收藏 所屬分類: Tiger學習筆記
    主站蜘蛛池模板: 免费一级毛片不卡在线播放| 亚洲精品国产电影午夜| 久久久久国产亚洲AV麻豆| 亚洲日本一区二区三区| 亚洲国产精品无码中文lv| 波霸在线精品视频免费观看| 色婷婷7777免费视频在线观看| 最近2019中文字幕mv免费看| 不卡精品国产_亚洲人成在线 | 国产一卡2卡3卡4卡2021免费观看 国产一卡2卡3卡4卡无卡免费视频 | 色欲A∨无码蜜臀AV免费播| 日韩免费观看一级毛片看看| 亚洲Aⅴ无码专区在线观看q| 污污视频免费观看网站| 国产大片线上免费观看| 亚洲人成网站色在线观看| 一级毛片免费观看| 亚洲高清无在码在线电影不卡| 成人无码区免费A∨直播| 亚洲高清国产拍精品26U| 一道本在线免费视频| 日本大片在线看黄a∨免费| 无码天堂亚洲国产AV| 免费黄色app网站| 亚洲国产精品乱码在线观看97| 国产成人无码区免费网站| 亚洲日韩中文字幕日韩在线| 亚洲AV噜噜一区二区三区 | 韩国二级毛片免费播放| 无码免费又爽又高潮喷水的视频| 午夜视频在线观看免费完整版| 91亚洲精品麻豆| 蜜桃AV无码免费看永久| 91亚洲自偷手机在线观看| 成人免费看吃奶视频网站| eeuss免费天堂影院| 亚洲伊人成无码综合网| 无码国产精品一区二区免费3p| 亚洲精品午夜国产va久久| 亚洲视频人成在线播放| 91免费播放人人爽人人快乐|