離弦之Ray

            BlogJava :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
            55 Posts :: 0 Stories :: 33 Comments :: 0 Trackbacks

          常用鏈接

          留言簿(19)

          我參與的團(tuán)隊(duì)

          搜索

          •  

          積分與排名

          • 積分 - 27318
          • 排名 - 1466

          最新評論

          閱讀排行榜

          評論排行榜

          Interfaces

          有兩種主要的Collection Types
          java.util.Map
          java.util.SortedMap
          java.util.Collection
          java.util.Set
          java.util.List
          java.util.SortedSet


          Implementations

          List的三種實(shí)現(xiàn)

          java.util.Vector
          java.util.ArrayList
          java.util.LinkedList

          三者的異同
          三者都是有序的,一般就是加入的次序。

                  VectorArrayList內(nèi)部都是用數(shù)組實(shí)現(xiàn)的,可以把它們想象成為一個(gè)數(shù)組。當(dāng)容量不夠的時(shí)候,就新建一個(gè)更大的數(shù)組,然后把現(xiàn)在這個(gè)數(shù)組中的所有元素都拷過去。可以想象這種實(shí)現(xiàn)可以很方便的直接取出你要的某個(gè)元素而不用遍歷。但是如果在中間刪除或者插入元素,效率就不高了。甚至每次擴(kuò)容的時(shí)候,都是很影響效率的時(shí)候。

                  VectorArrayList的區(qū)別就是Vector是線程安全的,但ArrayList不是。因?yàn)閷?shí)現(xiàn)線程安全是有代價(jià)的,如果應(yīng)用中不需要線程安全,那么就用ArrayList,如果需要線程安全那就一定要用Vector

          至于java中的LinkedList,其實(shí)在數(shù)據(jù)結(jié)構(gòu)中就是雙向鏈表。插入和刪除元素都很快,但是要查找一個(gè)元素就慢了。有失必有得,如何選擇,就看應(yīng)用的情況了。


          MapSortedMap的幾種實(shí)現(xiàn)

          java.util.HashTable
          java.util.HashMap
          java.util.IdentityHashMap
          java.util.WeakHashMap

                  以上四種都是無序的。HashTableHashMap的區(qū)別是HashTable是線程安全的而HashMap不是,這個(gè)關(guān)系有點(diǎn)像VectorArrayList

                  IdentityHashMap首先它是一個(gè)HashMap,不同的是,它不是根據(jù)equal()函數(shù)來判斷是否重復(fù),只要不是同一個(gè)對象,哪怕這兩個(gè)對象的數(shù)據(jù)都是一樣的,那么就可以add進(jìn)來。


          java.util.LinkedHashMap

          java.uil.TreeMap

                  以上兩種是有序的Map,可以進(jìn)行iterate,當(dāng)然這是要付出效率代價(jià)的。兩者不同之處,由名字便可知道,LinkedHashMap用鏈表來維護(hù)這個(gè)次序,而TreeMap是用二叉樹來維護(hù)這個(gè)次序。

          SetsSortedSets的幾種實(shí)現(xiàn)

          java.util.HashSet
          java.util.LinkedSet
          java.util.TreeSet

          由名字就可知道什么意思了,不多說了

          Collection的選擇

                  需要通過一個(gè)key找到一個(gè)元素嗎?
                  Yes,那就用Map
                  No,那就用Collection

                 如果選擇了一個(gè)Collection,允許重復(fù)元素嗎?
                 Yes,那就用List
                 No,那就用Set

                 然后就是決定要不要Sorted...這個(gè)就比較難決定了。
                 如果常常要sort,那就直接選擇sorted的類型
                 如果偶爾或者根本不需要sorted,那就選擇普通類型,需要sort的時(shí)候先拷到sorted的類型中sort一下。

          三種Iterators

          java.util.Enumeration

          這個(gè)基本被Iterator替代掉了,但在某些場合,比如J2ME中還可能用到。

          java.util.Iterator

          用的最廣泛

          java.util.ListIterator

          雙向的Iterator,必須用在實(shí)現(xiàn)ListCollection上面。


          PS很多Collection提供的是Fail-Fast Iterators,就是在iterater的時(shí)候,這個(gè)Collection是不能被更改的,否則就會(huì)報(bào)出ConcurrentModificationException在多線程環(huán)境下面尤其要注意。


          posted on 2007-10-26 21:14 離弦之ray的技術(shù)天空 閱讀(760) 評論(0)  編輯  收藏 所屬分類: Java
          主站蜘蛛池模板: 玛纳斯县| 阳城县| 新源县| 荔波县| 望都县| 洛浦县| 会东县| 闵行区| 吉木乃县| 荣昌县| 花莲县| 泌阳县| 奇台县| 平陆县| 江都市| 永新县| 红河县| 石泉县| 镇坪县| 沙雅县| 昭通市| 壤塘县| 聊城市| 张家港市| 襄汾县| 克什克腾旗| 江北区| 正安县| 平和县| 彭阳县| 东乌| 红安县| 巴彦县| 高邮市| 务川| 汉川市| 澳门| 略阳县| 博湖县| 年辖:市辖区| 双辽市|