<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學習筆記
    主站蜘蛛池模板: 亚洲风情亚Aⅴ在线发布| 最新亚洲成av人免费看| 成年人免费网站在线观看| 成年人免费的视频| 久久精品免费一区二区| 亚洲美女免费视频| 黄色免费网站网址| 2021国产精品成人免费视频| 青青青国产在线观看免费网站| 亚洲一级毛片免费观看| 可以免费看黄视频的网站| 免费精品国产自产拍在| 成人看的午夜免费毛片| 国产自产拍精品视频免费看| 国产传媒在线观看视频免费观看| 国产一区二区三区无码免费| 日本中文一区二区三区亚洲| 亚洲一本大道无码av天堂| 亚洲人成图片小说网站| 亚洲成A人片在线观看无码不卡| 久久亚洲国产精品| 亚洲成人福利网站| 亚洲中文无码卡通动漫野外| 精品亚洲福利一区二区| 黄色免费网址在线观看| a级毛片免费播放| 亚洲最大免费视频网| 日本一道高清不卡免费| 亚洲免费一区二区| 久久亚洲精品无码| 亚洲一级高清在线中文字幕| 亚洲AV无码一区二区三区网址| 免费无码一区二区| 嫩草在线视频www免费观看| 美女又黄又免费的视频| 日本高清在线免费| 成人奭片免费观看| 波多野结衣一区二区免费视频| 在线观看亚洲精品国产| 亚洲狠狠ady亚洲精品大秀| 精品亚洲成a人在线观看|