Java學(xué)習(xí)

          java,spring,structs,hibernate,jsf,ireport,jfreechart,jasperreport,tomcat,jboss -----本博客已經(jīng)搬家了,新的地址是 http://www.javaly.cn 如果有對(duì)文章有任何疑問(wèn)或者有任何不懂的地方,歡迎到www.javaly.cn (Java樂(lè)園)指出,我會(huì)盡力幫助解決。一起進(jìn)步

           

          Java基本概念:集合類 List/Set/Map... 的區(qū)別和聯(lián)系

          Collection:List、Set
          Map:HashMap、HashTable

          如何在它們之間選擇


          一、Array , Arrays

          Java所有“存儲(chǔ)及隨機(jī)訪問(wèn)一連串對(duì)象”的做法,array是最有效率的一種。

          1、
          效率高,但容量固定且無(wú)法動(dòng)態(tài)改變。
          array還有一個(gè)缺點(diǎn)是,無(wú)法判斷其中實(shí)際存有多少元素,length只是告訴我們array的容量。

          2、Java中有一個(gè)Arrays類,專門(mén)用來(lái)操作array。
               arrays中擁有一組static函數(shù),
          equals():比較兩個(gè)array是否相等。array擁有相同元素個(gè)數(shù),且所有對(duì)應(yīng)元素兩兩相等。
          fill():將值填入array中。
          sort():用來(lái)對(duì)array進(jìn)行排序。
          binarySearch():在排好序的array中尋找元素。
          System.arraycopy():array的復(fù)制。


          二、Collection , Map

          若撰寫(xiě)程序時(shí)不知道究竟需要多少對(duì)象,需要在空間不足時(shí)自動(dòng)擴(kuò)增容量,則需要使用容器類庫(kù),array不適用。

          1、Collection 和 Map 的區(qū)別

          容器內(nèi)每個(gè)為之所存儲(chǔ)的元素個(gè)數(shù)不同。
          Collection類型者,每個(gè)位置只有一個(gè)元素。
          Map類型者,持有 key-value pair,像個(gè)小型數(shù)據(jù)庫(kù)。

          2、各自旗下的子類關(guān)系

          Collection
               --List:將以特定次序存儲(chǔ)元素。所以取出來(lái)的順序可能和放入順序不同。
                     --ArrayList / LinkedList / Vector
               --Set : 不能含有重復(fù)的元素
                     --HashSet / TreeSet
          Map
               --HashMap
               --HashTable
               --TreeMap

          3、其他特征

          *   List,Set,Map將持有對(duì)象一律視為Object型別。
          *   Collection、List、Set、Map都是接口,不能實(shí)例化。
              繼承自它們的 ArrayList, Vector, HashTable, HashMap是具象class,這些才可被實(shí)例化。
          *   vector容器確切知道它所持有的對(duì)象隸屬什么型別。vector不進(jìn)行邊界檢查。


          三、Collections

          Collections是針對(duì)集合類的一個(gè)幫助類。提供了一系列靜態(tài)方法實(shí)現(xiàn)對(duì)各種集合的搜索、排序、線程完全化等操作。
          相當(dāng)于對(duì)Array進(jìn)行類似操作的類——Arrays。
          如,Collections.max(Collection coll); 取coll中最大的元素。
               Collections.sort(List list); 對(duì)list中元素排序

          四、如何選擇?

          1、容器類和Array的區(qū)別、擇取
              *   容器類僅能持有對(duì)象引用(指向?qū)ο蟮闹羔槪皇菍?duì)象信息copy一份至數(shù)列某位置。
              *   一旦將對(duì)象置入容器內(nèi),便損失了該對(duì)象的型別信息。

          2、
             *   在各種Lists中,最好的做法是以ArrayList作為缺省選擇。當(dāng)插入、刪除頻繁時(shí),使用LinkedList();
                Vector總是比ArrayList慢,所以要盡量避免使用。
             *   在各種Sets中,HashSet通常優(yōu)于HashTree(插入、查找)。只有當(dāng)需要產(chǎn)生一個(gè)經(jīng)過(guò)排序的序列,才用TreeSet。
                HashTree存在的唯一理由:能夠維護(hù)其內(nèi)元素的排序狀態(tài)。
             *   在各種Maps中
                HashMap用于快速查找。
             *   當(dāng)元素個(gè)數(shù)固定,用Array,因?yàn)锳rray效率是最高的。

          結(jié)論:最常用的是ArrayList,HashSet,HashMap,Array。


          注意:

          1、Collection沒(méi)有g(shù)et()方法來(lái)取得某個(gè)元素。只能通過(guò)iterator()遍歷元素。
          2、Set和Collection擁有一模一樣的接口。
          3、List,可以通過(guò)get()方法來(lái)一次取出一個(gè)元素。使用數(shù)字來(lái)選擇一堆對(duì)象中的一個(gè),get(0)...。(add/get)
          4、一般使用ArrayList。用LinkedList構(gòu)造堆棧stack、隊(duì)列queue。

          5、Map用 put(k,v) / get(k),還可以使用containsKey()/containsValue()來(lái)檢查其中是否含有某個(gè)key/value。
              HashMap會(huì)利用對(duì)象的hashCode來(lái)快速找到key。
              
          *   hashing
                  哈希碼就是將對(duì)象的信息經(jīng)過(guò)一些轉(zhuǎn)變形成一個(gè)獨(dú)一無(wú)二的int值,這個(gè)值存儲(chǔ)在一個(gè)array中。
                  我們都知道所有存儲(chǔ)結(jié)構(gòu)中,array查找速度是最快的。所以,可以加速查找。
                
                  發(fā)生碰撞時(shí),讓array指向多個(gè)values。即,數(shù)組每個(gè)位置上又生成一個(gè)梿表。

          6、Map中元素,可以將key序列、value序列單獨(dú)抽取出來(lái)。
          使用keySet()抽取key序列,將map中的所有keys生成一個(gè)Set。
          使用values()抽取value序列,將map中的所有values生成一個(gè)Collection。

          為什么一個(gè)生成Set,一個(gè)生成Collection?那是因?yàn)椋琸ey總是獨(dú)一無(wú)二的,value允許重復(fù)。

          posted on 2008-11-07 12:04 找個(gè)美女做老婆 閱讀(386) 評(píng)論(0)  編輯  收藏


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


          網(wǎng)站導(dǎo)航:
           

          導(dǎo)航

          統(tǒng)計(jì)

          公告

          本blog已經(jīng)搬到新家了, 新家:www.javaly.cn
           http://www.javaly.cn

          常用鏈接

          留言簿(6)

          隨筆檔案

          文章檔案

          搜索

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 利津县| 三原县| 女性| 响水县| 常宁市| 柘荣县| 丰县| 雅安市| 两当县| 玉环县| 三台县| 克什克腾旗| 东丽区| 四子王旗| 威远县| 广西| 塔城市| 泽州县| 石景山区| 东至县| 南汇区| 开鲁县| 蚌埠市| 赤峰市| 无极县| 正安县| 莱州市| 吴桥县| 延寿县| 突泉县| 昭通市| 盖州市| 榆中县| 灵璧县| 连南| 徐水县| 平顶山市| 靖江市| 大悟县| 梅州市| 新龙县|