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

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

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

    posts - 0, comments - 77, trackbacks - 0, articles - 356
      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

    數組 Collection List Set Map的比較

    Posted on 2008-03-02 17:50 semovy 閱讀(2075) 評論(1)  編輯  收藏 所屬分類: JAVA基礎

    數組
    數組和其它容器的區別主要有三方面:效率,類型,和保存基本類型的能力.在Java中,數組是一種效率很高的存儲和隨機訪問對象引用序列的方式.數組是一個簡單的線性序列,因此訪問速度很快,但也損失了其它一些特性.創建一個數組對象后,大小就固定了,如果空間不夠,通常是再創建一個數組,然后把舊數組中的所有引用移到新數組中.數組可可以保存基本類型,容器不行.
    容器類不以具體的類型來處理對象,而是將所有的對象都以Object類型來處理,所以我們可以只創建一個容器,任意的Java對象都可以放進去.容器類可以使用包裝類(Integer,Double等),以便把基本類型放入其中. List Set Map 都可以自動調整容量,數組不能.

    Collection表示一組對象,這些對象也稱為collection的元素。一些 collection允許有重復的元素,而另一些則不允許。一些collection是有序的,而另一些則是無序的。JDK中不提供此接口的任何直接實現,它提供更具體的子接口(如 Set 和 List)實現.

    Map 將鍵映射到值的對象。一個映射不能包含重復的鍵;每個鍵最多只能映射一個值.Map 接口提供三種collection視圖,允許以鍵集、值集合或鍵值映射關系集的形式查看某個映射的內容。某些映射實現可明確保證其順序,如 TreeMap(有序) 類;某些映射實現則不保證順序,如 HashMap(無序) 類。Map可以像數組那樣擴展成多維數組,只要把每個值也做成一個Map就行了.

    Collection和Map是Java容器中的兩種基本類型. 區別在于容器中每個位置保存的元素個數.Collection每個位置只能保存一個元素,包括List和Set.其中List以進入的順序保存一組元素; 而Set中的元素不能重復.ArrayList是一種List,HashSet是一種Set,將元素添加入任意Collection都可以使用add() 方法.Map保存的是健值對.使用put()為Map添加元素,它需要一個健和一個值作參數.

    ArrayList和LinkedList都實現了List接口,ArrayList底層由數組支持LinkedList由雙向鏈表支持,因此,如果經常在表中插入或刪除元素LinkedList比較適合,如果經常查詢ArrayList比較適合.
    Set的實現有TreeSet,HashSet,LinkedHashSet,HashSet查詢速度最快,LinkedHashSet保持元素插入次序,TreeSet基于TreeMap,生成一個總是處于排序狀態的Set.

                         Collection<--List<--Vector
                               Collection<--List<--ArrayList
                               Collection<--List<--LinkedList
                               Collection<--Set<--HashSet
                               Collection<--Set<--HashSet<--LinkedHashSet
                               Collection<--Set<--SortedSet<--TreeSet

    Vector : 基于ArrayList,其實就是封裝了Array所不具備的一些功能方便我們使用,它不可能走入Array的限制。性能也就不可能超越Array。所以,在可能的情況下,我們要多運用Array。另外很重要的一點就是Vector“sychronized”的,這個也是VectorArrayList的唯一的區別。

    ArrayList
    :同Vector一樣是一個基于Array上的鏈表,但是不同的是ArrayList不是同步的。所以在性能上要比Vector優越一些,但是當運行到多線程環境中時,可需要自己在管理線程的同步問題。

    LinkedList
    LinkedList不同于前面兩種List,它不是基于Array的,所以不受Array性能的限制。它每一個節點(Node)都包含兩方面的內容:1.節點本身的數據(data);2.下一個節點的信息(nextNode)。所以當對LinkedList做添加,刪除動作的時候就不用像基于ArrayList一樣,必須進行大量的數據移動。只要更改nextNode的相關信息就可以實現了。這就是LinkedList的優勢。

    List
    總結:

    1.
    所有的List中只能容納單個不同類型的對象組成的表,而不是KeyValue鍵值對。例如:[ tom,1,c ]

    2.
    所有的List中可以有相同的元素,例如Vector中可以有 [ tom,koo,too,koo ];

    3.
    所有的List中可以有null元素,例如[ tom,null,1 ]

    4.
    基于ArrayListVector,ArrayList)適合查詢,而LinkedList(鏈表)適合添加,刪除操作。

    HashSet
    :雖然SetList都實現了Collection接口,但是他們的實現方式卻大不一樣。List基本上都是以Array為基礎。但是Set則是在HashMap的基礎上來實現的,這個就是SetList的根本區別。HashSet的存儲方式是把HashMap中的Key作為Set的對應存儲項??纯?/span>HashSetaddObject   obj)方法的實現就可以一目了然了。

         public boolean add(Object obj)
         {
             return map.put(obj, PRESENT) == null;
         }

    這個也是為什么在Set中不能像在List中一樣有重復的項的根本原因,因為HashMapkey是不能有重復的。

    LinkedHashSet
    HashSet的一個子類,一個鏈表。

    TreeSet
    SortedSet的子類,它不同于HashSet的根本就是TreeSet是有序的。它是通過SortedMap來實現的。

    Set
    總結:

    1. Set
    實現的基礎是MapHashMap);

    2.   Set
    中的元素是不能重復的,如果使用add(Object obj)方法添加已經存在的對象,則會覆蓋前面的對象;


    評論

    # re: 數組 Collection List Set Map的比較  回復  更多評論   

    2008-08-21 16:10 by sinlff
    CSDN用了很久了, 第1次回貼, 分析的很透徹!!!
    主站蜘蛛池模板: 亚洲精品国产电影| 四虎影视永久免费观看地址| 亚洲乱码精品久久久久..| 国产福利电影一区二区三区,免费久久久久久久精 | 在线精品自拍亚洲第一区| 国产高清视频在线免费观看| 亚洲av永久无码天堂网| 国产大片免费观看中文字幕| 美女被吸屁股免费网站| 亚洲熟女乱综合一区二区| 国产成年无码久久久免费| 青青草原精品国产亚洲av| 日本在线高清免费爱做网站| 亚洲一区AV无码少妇电影| 亚洲国产一区二区三区青草影视| 182tv免费视频在线观看| 亚洲国产成人私人影院| 免免费国产AAAAA片| 亚洲av无码专区亚洲av不卡| 免费大黄网站在线观| 99re6在线视频精品免费| 久久久亚洲AV波多野结衣| 色se01短视频永久免费| 狼人大香伊蕉国产WWW亚洲| 国产成人亚洲综合无码| 97国产在线公开免费观看| 亚洲国产区男人本色在线观看| 免费在线观看一级毛片| 一级成人a毛片免费播放| 亚洲免费网站观看视频| 亚洲熟妇无码八AV在线播放| 91嫩草免费国产永久入口| 久久亚洲精品高潮综合色a片| 亚洲乱码精品久久久久..| 成年人视频在线观看免费| 国产日韩在线视频免费播放| 亚洲精品福利网站| 亚洲裸男gv网站| 永久免费av无码不卡在线观看| 日韩在线一区二区三区免费视频| 少妇中文字幕乱码亚洲影视|