<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學習筆記
    主站蜘蛛池模板: 精品国产污污免费网站入口在线| 日本免费污片中国特一级| 一级毛片免费不卡| 免费人妻无码不卡中文字幕系| 亚洲国产a∨无码中文777| 青柠影视在线观看免费| 亚洲国产精品久久久天堂| 香蕉免费一区二区三区| 免费大片在线观看网站| 亚洲专区在线视频| 4455永久在线观免费看| 亚洲人成无码网站| 亚洲免费观看视频| 亚洲高清中文字幕综合网| 国产精品视频免费| 豆国产96在线|亚洲| 日本h在线精品免费观看| 亚洲国产精品成人久久久| 成人免费视频77777| 亚洲成a∨人片在无码2023| 亚洲情a成黄在线观看| a级成人毛片免费视频高清| 亚洲黄黄黄网站在线观看| 国产无遮挡裸体免费视频在线观看| 在线观看亚洲一区二区| 好爽又高潮了毛片免费下载| 无遮挡国产高潮视频免费观看| 亚洲中文字幕第一页在线| 二级毛片免费观看全程| 久久久久亚洲av无码专区蜜芽| 在线看片免费人成视频久网下载| 亚洲国产成人久久综合一| 人妻视频一区二区三区免费| 特级毛片免费播放| 亚洲网址在线观看你懂的| 永久免费观看的毛片的网站| 亚洲欧美日韩中文高清www777| 免费a级毛片无码a∨蜜芽试看| 免费大片黄在线观看| 1区1区3区4区产品亚洲| 亚洲AV无码一区二区三区在线观看|