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

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

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

    我的JAVA窩! - BlogJava

    關于集合框架類的學習筆記

    集合類

    集合類的對象是用來管理其他若干對象的,它類似于C++標準模板庫中的容器,不過在JAVA的集合類的對象中可以用來存放多種類型的對象。

    接口和類共同構成了一個集合框架,集合的概念,一個對象可以裝載多個對象,這個對象就是集合對象。

    集合框架

    1,接口

    Collection 用來管理多個對象,集合中的每個元素都是對象。

    Map,Map中沒有對象,而是鍵值對,由Key,value組成的鍵值對,Key是不可重復的。value是可以相同的,一個Key和一個value一一對應。

    集合中用到的類,接口在java.util包中,在使用時注意將其引入import。

    Collection 接口(以下介紹其子接口)

    1)List 一個List的實現類的對象在管理多個對象時會按順序組織對象(即按照將對象放入的順序存儲),List實現類的對象是由順序的。(注意,順序和排序的區別)

    2)Set 一個Set的實現類表示一個數學概念上的集合,Set的實現類的對象中的元素是無順序的,也就是不會按照輸入順序來存放,Set的實現類對象中的元素是不重復的。

    3)SortedSet,他是Set的子接口,他的實現類會對集合中的元素進行排序。但是要指定排序規則,他會按排序規則進行排序。

    Map 接口(以下介紹其子接口)

    SortedMap,這個接口的實現類同樣可以實現,不過是對鍵值對中的Key進行排序,這個接口的實現類也是要指定排序規
    則的。

    JDK1.4中的集合是不安全的對象,JDK5.0中解決了這個問題。

    List接口的實現類

    1> ArrayList是接近于功能的集合類,ArryList的實質就是一個會自動增長的數組,ArrayList是用封裝的數組來實現的List接口的。

    Collection的實現類對象的遍歷方式是用迭代來實現的。
    在使用迭代器時先要活得一個迭代器的對象,Iterator(迭代器接口)這是一個接口,迭代器是在集合類中實現的,也
    就是說,他是一個內部類(匿名內部類)實現的。
    Iterator接口中定義的常用方法方法hasNext(),next()。
    hasNext(),這個方法會使用一個游標,并通過判斷游標指向的位置是否存放有對象。
    next()方法也是Iterator接口中定義好的方法,這個方法會使游標指向下一個元素的位置,游標會跳過第一個元素,并
    返回其中的內容。

    Collections 這是一個工具類,也是java.util包中的,這個類中的sort(list接口的實現類的對象)方法,其參數是一個集合類的對象,這個方法使用來對集合類的對象進行排序的。以后,我將以集合這個名字來稱呼集合類的對象。,對于
    字符串對象內容的集合來說會按字典順序排序(升序),對于數字內容的集合排序也會按照升序排序。

    排序可一份為兩部分內容,一個是排序的規則,也就是按照什么來進行排序,并且排成什么樣的順序。
    第二個就是排序的算法,他決定了排序的效率。

    在對自定義的集合內容類型排序時,需要先定義那個類型的排序規則。

    Comparable接口,這個接口中只定義了一個compareTo(Object o),方法的返回至類型是整型,如果當前對象大于參數對象就返回正數,當前對象等于參數對象是就返回0,當前對象小于參數對象時就返回負值,這樣寫就是升序排列,反之則是進行降序排列,在實現這個接口中的方法時,返回值定義方式,只有這兩種。

    根據指定類型的排序規則實現了Comparable接口,那么就可以對存有這個類型的集合進行整體排序。Comparable接口,
    也叫做可比較接口。這個接口在java.lang包下。只要實現了這個接口,就是可排序的

    接下來介紹另外一種對自定義類型對象的集合整體排序的方法,也就是實現比較器接口(Comparator),這個接口中定義了一個compare(Object o1,Object o2)方法來比較兩個對象,這個方法的返回值定義和上面介紹的那個方法是一樣。

    注意:在API,幫助文檔中以上兩個方法的參數類型是T,這代表的模板類型,也就是集合中存放的內容的類型,在JDK1.4中其參數就是Object類型,模板類型的詳細內容會在最后的JDK5.0新特性中講到。

    Comparator接口可以在匿名內部類中實現,Collections 中的sort(集合了的對象,比較器)方法,可以對自定義類型內容的集合進行整體排序。

    2>LinkedList,它是List接口的實現類,其底層是用雙向循環鏈表來實現的。

    注意:ArrayList的查詢效率比較高,增刪動作的效率比較差,適用于查詢比較頻繁,增刪動作較少的元素管理的集合。
    ? ? ?LinkedList的查詢效率低,但是增刪效率很高。適用于增刪動作的比較頻繁,查詢次數較少的元素管理集合。

    ArrayList,LinkedList都是線程不安全的。
    實現堆棧 1,數組(ArrayList,增刪效率比較低,不適合)
    ? ? ? ? 2,LinkedList實現堆棧的好方法
    ? ? ? ? 3,java.util.Stack類,Stack是Vector的子類,Vector類是一個線程安全的(是一個重量級的類),并繼承
    了Vector的方法,Verctor類和ArrayList的功能近乎相同。(不推薦使用Stack類來實現堆棧)。

    Set接口的實現類

    HashSet

    Set的實現類的集合對象中不能夠有重復元素,HashSet也一樣他是使用了一種標識來確定元素的不重復,HashSet用一種算法來保證HashSet中的元素是不重復的,HashSet的底層實現還是數組。

    Object類中的hashCode()的方法是所有子類都會繼承這個方法,這個方法會用Hash算法算出一個Hash(哈希)碼值返回,HashSet會用Hash碼值去和數組長度取模,模(這個模就是對象要存放在數組中的位置)相同時才會判斷數組中的元素和要加入的對象的內容是否相同,如果不同才會添加進去。

    Hash算法是一種散列算法。

    注意:所以要存入HashSet的集合對象中的自定義類必須覆蓋hashCode(),equals()兩個方法,才能保證集合中元素容不重復。在覆蓋和hashCode()方法時,要使相同對象的hashCode()方法返回相同值,覆蓋equals()方法再判斷其內容。為了保證效率,所以在覆蓋hashCode()方法時,也要盡量使不同對象盡量返回不同的Hash碼值。

    如果數組中的元素和要加入的對象的hashCode()返回了相同的Hash值(相同對象),才會用equals()方法來判斷兩個對象的內容是否相同。

    SortedSet接口是Set的子接口。
    TreeSet是SortedSet接口的實現類,他可以對集合中的元素進行排序。
    要存放在TreeSet中自定義類的對象,這個類要么是已經實現了Comparable接口,要么是能給出Comparator比較器,TreeSet可以自動過濾掉重復元素所以不用重載hashCode()方法,TreeSet會根據比較規則判斷元素內容是否相同,TreeSet會在元素存入世就進行了排序。(在TreeSet給出排序規則時,一定要注意對象內容相等的條件,一定要注意在主觀的認為兩個對象內容相同時,才可以使用比較少的條件來進行判斷)

    要排序時才使用TreeSet類(存儲效率比較低),HashSet的存儲效率比較高,在需要為HashSet的對象排序時,就可以把HashSet中的元素放入TreeSet。

    posted on 2007-03-19 21:55 J2S 閱讀(1189) 評論(0)  編輯  收藏


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    <2007年3月>
    25262728123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    導航

    統計

    常用鏈接

    留言簿(2)

    隨筆檔案

    最新隨筆

    搜索

    積分與排名

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 日韩国产精品亚洲а∨天堂免| 亚洲国产精品国自产拍电影 | 亚洲一级黄色视频| 亚洲av无码一区二区三区人妖| 久久久高清免费视频| 亚洲AV综合色区无码二区偷拍 | 亚洲第一区香蕉_国产a| 青柠影视在线观看免费高清| 亚洲无线码在线一区观看| 中国一级毛片视频免费看| 亚洲精品少妇30p| 日本一区二区免费看| 亚洲日本香蕉视频| 男人的好看免费观看在线视频| 亚洲午夜在线播放| 日本免费网站观看| 人妻仑乱A级毛片免费看| 亚洲精品乱码久久久久久久久久久久| 中文字幕免费在线看电影大全 | 国产亚洲成人在线播放va| a级精品九九九大片免费看| 亚洲电影一区二区| 0588影视手机免费看片| 亚洲自偷自偷在线成人网站传媒| 日本特黄特黄刺激大片免费| 一道本在线免费视频| 久久精品国产亚洲av四虎| 国产成人无码免费看视频软件| 亚洲av无码专区在线电影| 亚洲区不卡顿区在线观看| 91制片厂制作传媒免费版樱花| 亚洲日本va一区二区三区| 亚洲精品视频在线观看你懂的| 99蜜桃在线观看免费视频网站| 亚洲色大成WWW亚洲女子| 亚洲综合色成在线播放| 永久免费视频网站在线观看| 亚洲AV无码一区二区一二区| 亚洲成色WWW久久网站| 嫩草影院免费观看| 在线观看免费播放av片|