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

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

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

    Java容器集合學習心得

    在Java中有許多的容器集合。初一看起來有些糊涂,特別是對剛接觸Java來說(至少我當初就是這樣的)!其實稍微細心,深入一點點就會發現原來一切都是有規律的。我想別的事情也會是如此。
    ???????Java中的容器,接口都是由一些接口,抽象類及它們的實現類所組成。而它們全部封裝在java.util
    包中。


    1:Collection接口。

    ?????? 大多數的集合都實現了此接口,它基本方法是add(沒有get()方法,實現類中可能有如Arrylist),添加一對象。添加成功則返回true ,否則返回false。這是與Map不同的地方。還有一些常用的方法如iterator(),size(),toArray()(注:toArray()是返回一對象----object數組,而Arrays----也是java.util下的一個類,有一個asList方法它們通常認為是各集合之間轉換的橋梁)等等!具體用法可以參考API文檔。


    2:Map(映射)
    ?????? Map接口跟Collection接口實際上沒有半點關系。集合中的每一個元素都包含一對鍵對對象和值對象,集合中沒有重復的鍵對象,值對象可以重復。它的有些實現類能對集合中的鍵對象進行排序。與Collection截然不同的是,它其中所存取的是一些值與名相對應的數據。也就是一個Key對應一個Value的方式來存儲。所以它就有與之對應的一些方法如:put (K key, V value)等等,更多可以參考API文檔。

    3:List(列表)
    ??????集合中的對象按索引位置排序,可以有重復對象,允許按照對象在集合中的索引位置檢索對象

    4:Set(集)
    ??????集合中的對象中按特定的方式排序,并且沒有重復對象。它的有些實現類能對集合中的對象
    按特定的方式排序

    5:迭代器:Iterator
    ?????? 它是一個接口,只有三個方法hasnext(),next(),remove()只有最后一個是可選的,也就是remove()是可選(在實現的時候)。其可選性也意味著它的實現類中,remove方法是可有可無的。例如,若有一個如下的List 實例。
    ????????
    ????Arrylist?al? = ? new ?Arrylist();
    ????Object[]?ob?
    = ?al.toArray();
    ????List?list?
    = ?Arrays.asList(ob);
    ????Iterator?itor?
    = ?list.iterator();
    ????itor.remove();??????
    // Error?

    ??????? 當調用Ierator itr = list.iterator()方法返回一迭代器的時候,便不支持remove方法,所以當你再使用irt.remove()時程序就是異常!

    ??????? 使用此迭代器要注意的是remove()方法。它所刪除的是指指針(暫這么叫著)上次所移經過的位置(Removes from the underlying collection the last element returned by the iterator (optional operation).)。我個人覺得有點象在JDBC中的ResultSet rs = ....;rs.last();rowsCount=rs.getRow();類似呢。
    ??????? 前面所講的,由于clollection提供了iterator()方法,所以迭代器是很容易實現的!

    6:常用實現類的一些繼承關系:

    ??????? Collections,它是Java.util下的一個類。它為我們提供了許多有用的方法,如sort(...),max()等其具體用法可以參考API文檔,比如sort(List list);中list內的所有元素都必須實現Comparable接口(All elements in the list must implement the Comparable interface)。

    ??????
    Arrylist,它是List接口的實現類,而List則是繼承于Collection。
    ???????LinkedList,它也是間接對Colections的實現。用linkedlist的一些方法如addfirst(),removefirst(),addlast()等等可以用來實現如C中的堆棧,鏈表。(對于頻繁使用插入與刪除操作使用linkedlist是個不錯的選擇,對于經常進行索引操作則arrylist較好)。


    ??????? HashSet(散列表),它實現了Set接口,也就意味著它的元素不能有重復值出現。并且在HashSet中沒有get()方法,但可以通過iterator()來實現。要注意的是假如要在HasSet中存放一些對象,那么你得重定義hashCode()與equals()二個方法來保不可以存放相同的內容的元素。對于hashcode()所返回的值,hashset用它來計算(通過特定的函數)該對象在內存中的存放位置;后者主要用來判斷二個對象的內容是否相等而返回對應的boolen型。
    ?????? TreeSet,主要用來對元素進行排序操作,假如要往其中添加對象,則對象得實現
    Comparable接口。(假如不要對元素排序,則一般可選用HashSet)。

    ???????HashMap,主要特點是存放的一個鍵值對,一些有用的方法是可返回視圖(我覺得可以把它理解為一個集合)如:keyset(),values(),entyset()等。
    ??????? TreeMap,它與HashMap差不多,不過是增加了對元素的排序功能,所以運行速度也就當然沒有hashmap來得快了。
    ?????????以下是HashMap的一個實例(在對DB進行操作的時候很有用):
    HashMap?valueMap;
    //this?function?just?get?key-value?form?DB?,defined?by?yourself
    valueMap?=?commondb.getElementStringValues("COMMENT_ID",?"content");
    java.util.Set?tempkeys?
    =?valueMap.entrySet();
    ????????????java.util.Iterator?keys?
    =?tempkeys.iterator();
    while(keys.hasNext())
    ????????????????
    {
    ????????????????????java.util.Map.Entry?me
    =(java.util.Map.Entry)keys.next();
    String?value?
    =?me.getValue();
    int?key?=?me.getKey();
    }


    ???????要注意的是entrySet()所返回的每一個元素都是Map.Entry類型的!(Returns a collection view of the mappings contained in this map. Each element in the returned collection is a Map.Entry.)??????
    ?
    ?????? Properties,繼承于hashtable。這個東東相信我們比較的喜歡了(在i18n,ant中可以是常見得很),呵呵。它可以從外部導入屬性文件。文件中的鍵值都是String類型。just like this:
    ????????
    company=study
    author
    =Jkallen
    copyright
    =2005-2006
    ???????
    ??????? ?操作如下:
    ???????
    import?java.util.*;
    import?java.io.*;
    class?PropTest
    {
    ????
    public?static?void?main(String[]?args)
    ????
    {
    ????????
    /*Properties?pps=System.getProperties();
    ????????pps.list(System.out);
    */

    ????????Properties?pps
    =new?Properties();
    ????????
    try
    ????????
    {
    ????????????pps.load(
    new?FileInputStream("winsun.ini"));
    ????????????Enumeration?
    enum=pps.propertyNames();
    ????????????
    while(enum.hasMoreElements())
    ????????????
    {
    ????????????????String?strKey
    =(String)enum.nextElement();
    ????????????????String?strValue
    =pps.getProperty(strKey);
    ????????????????
    ????????????????System.out.println(strKey
    +"="+strValue);
    ????????????}

    ????????}

    ????????
    catch(Exception?e)
    ????????
    {
    ????????????e.printStackTrace();
    ????????}

    ????}

    }

    ??????? 其用法可以查看API文檔呢。

    ??????? Java中的集合容器確實不少呢...其中有些我們也許一直都用不到,(我也是查看了些相關的資料再加上自己的一些想法整理了一下,希望對相關朋友有用?。┛墒侵匾氖侵牢覀冊趯崿F一個功能時應該選用哪種集合類來實現就OK了。


    posted on 2006-06-09 15:57 nbt 閱讀(273) 評論(0)  編輯  收藏 所屬分類: Java2SE相關

    <2006年6月>
    28293031123
    45678910
    11121314151617
    18192021222324
    2526272829301
    2345678

    導航

    統計

    常用鏈接

    留言簿(3)

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    相冊

    收藏夾

    Java技術網站

    友情鏈接

    國內一些開源網站

    最新隨筆

    搜索

    積分與排名

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲Av永久无码精品黑人| 久久久久无码精品亚洲日韩| 亚洲一本之道高清乱码| 久久久久国产精品免费看| 亚洲精品国偷自产在线| 久久久精品视频免费观看 | 亚在线观看免费视频入口| 亚洲乳大丰满中文字幕| 久久久WWW成人免费精品| 亚洲午夜久久久久久久久久| 中文在线免费视频| 亚洲色无码专区在线观看| 亚洲免费在线观看| 五月婷婷综合免费| 内射少妇36P亚洲区| 亚洲一区二区三区免费在线观看 | 日韩一区二区三区免费体验| 亚洲精品国产综合久久久久紧| 热99re久久免费视精品频软件| 亚洲妇熟XXXX妇色黄| 日韩午夜理论免费TV影院| 亚洲二区在线视频| 国产高清免费在线| 巨胸喷奶水视频www免费视频| 亚洲AV乱码久久精品蜜桃| 国产精彩免费视频| 亚洲电影国产一区| 无码少妇一区二区浪潮免费| 亚洲精品国产av成拍色拍| 亚洲日韩国产一区二区三区| 国产啪精品视频网站免费尤物| 亚洲国产精品成人久久久| 爱丫爱丫影院在线观看免费| 亚洲精品韩国美女在线| 暖暖免费高清日本中文| 中文字幕视频免费在线观看| 亚洲福利电影一区二区?| 国产人妖ts在线观看免费视频| 久久久久亚洲AV无码去区首| 亚洲男人的天堂www| 人妻视频一区二区三区免费|