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

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

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

    我的JAVA窩! - BlogJava

    關(guān)于集合框架類的學(xué)習(xí)筆記

    集合類

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

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

    集合框架

    1,接口

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

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

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

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

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

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

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

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

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

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

    List接口的實現(xiàn)類

    1> ArrayList是接近于功能的集合類,ArryList的實質(zhì)就是一個會自動增長的數(shù)組,ArrayList是用封裝的數(shù)組來實現(xiàn)的List接口的。

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

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

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

    在對自定義的集合內(nèi)容類型排序時,需要先定義那個類型的排序規(guī)則。

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

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

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

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

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

    2>LinkedList,它是List接口的實現(xiàn)類,其底層是用雙向循環(huán)鏈表來實現(xiàn)的

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

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

    Set接口的實現(xiàn)類

    HashSet

    Set的實現(xiàn)類的集合對象中不能夠有重復(fù)元素,HashSet也一樣他是使用了一種標(biāo)識來確定元素的不重復(fù),HashSet用一種算法來保證HashSet中的元素是不重復(fù)的,HashSet的底層實現(xiàn)還是數(shù)組

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

    Hash算法是一種散列算法。

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

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

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

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

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


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


    網(wǎng)站導(dǎo)航:
     
    <2007年3月>
    25262728123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    導(dǎo)航

    統(tǒng)計

    常用鏈接

    留言簿(2)

    隨筆檔案

    最新隨筆

    搜索

    積分與排名

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 麻豆精品国产免费观看| 成人A片产无码免费视频在线观看| 3344免费播放观看视频| 亚洲AV无码第一区二区三区| a级片在线免费看| 亚洲国产精品无码久久久蜜芽| 国内精品免费久久影院| 亚洲人色婷婷成人网站在线观看| 国产亚洲福利精品一区二区| 国产又粗又猛又爽又黄的免费视频| 久久精品国产免费观看三人同眠| 久久亚洲AV无码精品色午夜麻| 国产成人AV免费观看| 亚洲网站在线观看| 57pao一国产成视频永久免费| 亚洲视频2020| 日本亚洲免费无线码| 亚洲精品高清无码视频| 黄网站色视频免费在线观看的a站最新| 亚洲一区精品无码| 全部免费毛片在线播放| 亚洲一级毛片免费在线观看| 一本到卡二卡三卡免费高| 亚洲人精品午夜射精日韩| 99精品视频免费在线观看| 亚洲AV无码一区二区三区在线| 成人毛片18岁女人毛片免费看| 男性gay黄免费网站| 亚洲精品无码永久在线观看你懂的 | 精品亚洲国产成人av| 亚洲va中文字幕无码| 免费久久人人爽人人爽av| 亚洲视频国产视频| 国产成人免费永久播放视频平台| 日韩精品视频在线观看免费| 久久精品国产96精品亚洲| 最近最好的中文字幕2019免费 | 精品久久久久久国产免费了| 亚洲人成网www| 成人免费无码精品国产电影| 亚洲AV无码一区二区三区牛牛|