<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 閱讀(1237) 評論(0)  編輯  收藏 所屬分類: Tiger學習筆記
    主站蜘蛛池模板: 免费国产美女爽到喷出水来视频| 97av免费视频| 全黄性性激高免费视频| 亚洲Av无码国产一区二区| 永久免费观看的毛片的网站| 中文字幕亚洲情99在线| 在线免费观看色片| 亚洲av中文无码字幕色不卡| 国产成人免费网站在线观看| 亚洲成a∧人片在线观看无码| 日韩毛片免费在线观看| 羞羞漫画小舞被黄漫免费| 亚洲国产一成久久精品国产成人综合 | 免费黄色福利视频| 亚洲精品美女在线观看| 国产免费女女脚奴视频网 | 波多野结衣一区二区免费视频| 亚洲高清乱码午夜电影网| 免费国产美女爽到喷出水来视频| 成人免费网站久久久| 亚洲人成网7777777国产| 日本黄色动图免费在线观看| 亚洲精品在线免费观看视频| 成人午夜免费福利| 成人福利在线观看免费视频| 亚洲va久久久噜噜噜久久男同| 99re在线精品视频免费| 亚洲精品无AMM毛片| 中文字幕精品无码亚洲字| 特级无码毛片免费视频尤物| 日韩亚洲国产高清免费视频| 四虎永久免费影院| 嫩草在线视频www免费观看| 亚洲午夜无码毛片av久久京东热| 高清在线亚洲精品国产二区| 日本人成在线视频免费播放| 亚洲中文无码永久免| 亚洲综合色成在线播放| 24小时日本韩国高清免费| 激情婷婷成人亚洲综合| 亚洲男人都懂得羞羞网站|