Picses' sky

          Picses' sky
          posts - 43, comments - 29, trackbacks - 0, articles - 24

          Java集合與數(shù)組[zz]

          Posted on 2007-07-18 14:49 Matthew Chen 閱讀(694) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): Java SE

          Java集合與數(shù)組

          1.Java2提供了一 個(gè)完整的集合框架,而Java的早期版本只提供了一些集合類(lèi),如Hashtable和Vector,以及內(nèi)建的數(shù)組功能。


          2.組成集合框架的類(lèi)和接口是java.util包的成員,Arrays類(lèi)提供了用于操作數(shù)組的static方法,Aarrys類(lèi)的方法包括用于查找的binarySearch方法,用于比較數(shù)組的equals方法,用于給數(shù)組賦值的fill方法,以及排序的sort方法和asList方法。另外對(duì)Arrays類(lèi)中的對(duì)象進(jìn)行排序,對(duì)象必須實(shí)現(xiàn)Comparable接口的compareTo方法

          3.Size方法得到List中元素的個(gè)數(shù),get得到List中取出第一個(gè)元素

          4.Collection接口是集合層次結(jié)構(gòu)中的根接口,Set接口和List接口都是從Collection接口中派生出來(lái)的,Collection接口包含了在集合中添加,清除,比較和保持對(duì)象的大規(guī)模操作。Collection接口提供了iterator方法得到Iterator。

          5.Collections類(lèi)提供了許多操作集合的static方法,其中許多方法實(shí)現(xiàn)用于查找和排序等愛(ài)貓撲.愛(ài)生活。

          6.List是一個(gè)能包含重復(fù)元素的已排序的Collection,有時(shí)候List也稱(chēng)為序列,List接口由ArrayList類(lèi),LinkedList類(lèi)和Vector實(shí)現(xiàn)的,ArrayList是List可變數(shù)組的實(shí)現(xiàn),類(lèi)似Vector類(lèi)的行為和功能,LinkedList則是List的鏈表實(shí)現(xiàn)。

          7.iterator的hasNext方法卸螩ollection是否還含有另外一個(gè)元素,如果還有,則hasNext方法返回true,next方法返回Collection中的下一個(gè)對(duì)象并移動(dòng)到下一個(gè)元素。
           
          8.subList得到List的一部分,這一部分被稱(chēng)為子表,對(duì)子表的修改都會(huì)影響到List,clear方法從List中刪除元素,
           
          9.toArray方法以數(shù)組的形式返回集合中的內(nèi)容。
           
          10.Comparator對(duì)象提供一種排序方式,可以按不同Colletion自然順序的順序?qū)ollection的元素排序,reverseOrder方法返回一個(gè)Comparator對(duì)象,它代表了集合的逆轉(zhuǎn)排序。也可以實(shí)現(xiàn)你自己的排序方法,前提是實(shí)現(xiàn)Comparator接口,并實(shí)現(xiàn)Comparator接口的compare方法
           
          11.Shuffle算法對(duì)list中的元素進(jìn)行隨機(jī)排序,binarySearch算法在List中查找一個(gè)Object
           
          12.Set是不包含重復(fù)元素的Collection,集合框架含有Set的兩種實(shí)現(xiàn)方式:HashSet和TreeSet,HashSet把他的元素存儲(chǔ)在哈希表中,而TreeSet則把他的元素存儲(chǔ)在樹(shù)中。
           
          13.SortedSet接口擴(kuò)展了Set并按排好的順序維護(hù)了它的元素,TreeSet類(lèi)實(shí)現(xiàn)了它。

          14.headSet方法得到TreeSet中小于一個(gè)指定元素的子集,對(duì)這一子集的修改都會(huì)反映在TreeSet中,tailSet方法得到大于或等于指定元素的子集,同樣對(duì)它的修改都會(huì)反映在TreeSet中。
           
          15.Map把鍵映射到值并不包含重復(fù)的鍵,Map和Set的不同之處在于Map包含鍵和值,而Set只包含鍵,HashMap和TreeMap類(lèi)實(shí)現(xiàn)了Map接口,HashMap把他的元素存儲(chǔ)在哈希表中,而TreeMap則把他的元素存儲(chǔ)在樹(shù)中。
           
          16.SortedMap接口擴(kuò)展了Map并按排好的順序維護(hù)了它的元素,TreeMap類(lèi)實(shí)現(xiàn)了它。
           
          17.內(nèi)建的集合都是異步的,多線(xiàn)程對(duì)Collection的并發(fā)訪(fǎng)問(wèn)可能導(dǎo)致不確定的結(jié)果,為了防止這個(gè)問(wèn)題,可以在被多線(xiàn)程訪(fǎng)問(wèn)的類(lèi)外面使用同步包裝類(lèi),Collections類(lèi)提供了一系列的static方法把集合轉(zhuǎn)化成不可以修改的形式,當(dāng)試圖修改時(shí),拋出異常。
          Public static方法頭文件:(同步)
          Collection synchronizedCollection(Collection c);
          List  synchronizedList(List c)
          其他類(lèi)似。。
           
          Public static方法頭文件:(不可以修改)
          Collection unmodifiableCollection(Collection c);
          List  unmodifiableList(List c)
          其他類(lèi)似。。

          集合框架提供了不同的抽象實(shí)現(xiàn),程序員可以利用此來(lái)實(shí)現(xiàn)自己定義的實(shí)現(xiàn)!


          18.數(shù)組和容器的區(qū)別主要有以下三點(diǎn):效率,類(lèi)型識(shí)別以及可以持有primitives

          19.容器類(lèi)保持的類(lèi)型都是Object的,主要有三種 list ,set, map,容器的缺點(diǎn)主要是保存元素的時(shí)候,丟失元素的類(lèi)型,使用元素的時(shí)候,必須進(jìn)行類(lèi)型轉(zhuǎn)換

          20 list的選擇:
             ArrayList隨機(jī)訪(fǎng)問(wèn)的效率要比LinkList快,但是LinkList順序訪(fǎng)問(wèn)的效率則高過(guò)ArrayList,另外LinkList在對(duì)元素進(jìn)行插入和刪除操作時(shí)要比ArrayList的效率高,二者的最佳選擇方法是:首先選用ArrayList當(dāng)發(fā)現(xiàn)“向元素中插入和刪除操作太多時(shí)”引發(fā)性能問(wèn)題時(shí),換用LinkList,當(dāng)然處理固定元素還是選用數(shù)組

          21.set的選擇:
             HashSet的各項(xiàng)性能都要比TreeSet強(qiáng),但是TreeSet的意義在于能順序保存元素,因此只有在需要有順序set時(shí)才用TreeSet;
             LinkedHashSet的插入操作要比HashSet慢,主要是因?yàn)榍罢叱袚?dān)了鏈表和hash容器的雙重代價(jià),由于鏈表的緣故LinkedHashSet的遍歷則要比 HashSet快

          22.Map的選擇:
             HashMap的效率和HashTable差不多,一般來(lái)說(shuō)HASHMAP要稍快,HASHMAP是用來(lái)取代HASHTABLE的,TREEMAP的效率要比HAHSMAP低,但是TREEMAP由于是樹(shù)結(jié)構(gòu),所以是有序的,因此不需要進(jìn)行排序操作,如果不需要恒定有序的MAP時(shí),一般來(lái)說(shuō)首選HASHMAP,LINKEDHASHMAP比HASHMAP要慢,因?yàn)槌吮4鍴ASH容器外還有保存鏈表,IDENTITYHASHMAP沒(méi)有辦法和上敘MAP比較,它用的是==來(lái)比較兩個(gè)對(duì)象的相等性,而不是equals()


          23.所有hash類(lèi)容器持有的對(duì)象必須覆蓋hashcode和equals方法

          主站蜘蛛池模板: 津市市| 齐齐哈尔市| 特克斯县| 广元市| 平武县| 井陉县| 石河子市| 商城县| 大姚县| 称多县| 葵青区| 嘉定区| 闽侯县| 商城县| 开原市| 合肥市| 锦州市| 大同县| 布尔津县| 雷山县| 桓台县| 灵寿县| 康马县| 长汀县| 武安市| 工布江达县| 渑池县| 怀来县| 钦州市| 丹阳市| 延安市| 霍山县| 连平县| 岫岩| 山东省| 宜兰市| 林甸县| 会同县| 丁青县| 宾川县| 日土县|