統計

          留言簿(1)

          DB

          Others

          QA

          Tech Website

          閱讀排行榜

          評論排行榜

          Java集合框架比較


           

          數組類ArrayJava中最基本的一個存儲結構。它用于存儲一組連續的對象或基本類型的數據。其中的元素的類型必須相同。

          Array是最有效率的一 種:

          1、效率高,但容量固定且無法動態改變。 Array還有一個缺點是,無法判斷其中實際存有多少元素,length只是告訴我們Array的容量。

          2、Java中有一個Arrays類,專門用來操作Array,提供搜索、排序、復制等靜態方法。 equals():比較兩個Array是否相等,Array擁有相同元素個數,且所有對應元素兩兩相等。 fill():將值填入Array中。 sort():用來對Array進行排序。 binarySearch():在排好序的Array中尋找元素。 System.arraycopy()Array的復制。

          Java Collections Framework成員主要包括兩種類型,即:CollectionMap類型。 Java中提供了CollectionMap接口。其中ListSet繼承了Collection接口;VectorArrayList、 LinkedList三個類實現List接口,HashSet、TreeSet實現Set接口,HashTable、HashMap、 TreeMap實現Map接口。由此可見,Java中用8種類型的基本數據結構來實現其Collections Framework;下面分別進行介紹。

          Vector:基于ArrayList,性能也就不可能超越Array,并且Vector"sychronized",這個也是VectorArrayList的唯一的區別。

          ArrayList:同Vector一樣是一個基于Array的,但是不同的是ArrayList不是同步的。所以在性能上要比Vector優越一些,但 是當運行到多線程環境中時,可需要自己在管理線程的同步問題。從其命名中可以看出它是一種類似數組的形式進行存儲,因此它的隨機訪問速度極快。

          LinkedListLinkedList不同于前面兩種List,它不是基于Array的,所以不受Array性能的限制。它每一個節點(Node 都包含兩方面的內容:

          1、節點本身的數據(data);

          2、下一個節點的信息(nextNode)。所以當對LinkedList做添加,刪除動作的時候 就不用像基于ArrayList一樣,必須進行大量的數據移動。只要更改nextNode的相關信息就可以實現了所以它適合于進行頻繁進行插入和刪除操 作。這就是LinkedList的優勢。Iterator只能對容器進行向前遍歷,而 ListIterator則繼承了Iterator的思想,并提供了對List進行雙向遍歷的方法。

          List總結:

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

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

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

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

          HashSet:雖然SetList都實現了Collection接口,但是他們的實現方式卻大不一樣。List基本上都是以Array為基礎。但是 Set則是在HashMap的基礎上來實現的,這個就是SetList的根本區別。HashSet的存儲方式是把HashMap中的Key作為Set 對應存儲項,這也是為什么在Set中不能像在List中一樣有重復的項的根本原因,因為HashMapkey是不能有重復的。HashSet能快速定位 一個元素,但是放到HashSet中的對象需要實現hashCode()方法0。

          TreeSet則將放入其中的元素按序存放,這就要求你放入其中的對象是可排序的,這就用到了集合框架提供的另外兩個實用類Comparable Comparator。一個類是可排序的,它就應該實現Comparable接口。有時多個類具有相同的排序算法,那就不需要重復定義相同的排序算法,只要實現Comparator接口即可。TreeSetSortedSet的子類,它不同于HashSet的根本就是TreeSet是有序的。它是通過SortedMap來實現的。

          Set總結:

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

          2Set中的元素是不能重復的,如果使用add(Object obj)方法添加已經存在的對象,則會覆蓋前面的對象; Set里的元素是不能重復的,那么用什么方法來區分重復與否呢? 是用==還是equals()? 它們有何區別? Set里的元素是不能重復的,即不能包含兩個元素e1、e2e1.equalse2))。那么用iterator()方法來區分重復與否。 equals()是判讀兩個Set是否相等。==方法決定引用值(句柄)是否指向同一對象。

          HashMap、TreeMap、Hashtable

          1、HashMap也用到了哈希碼的算法,以便快速查找一個鍵,TreeMap則是對鍵按序存放,因此它有一些擴展的方法,比如 firstKey(),lastKey()等。

          2、Hashtable:不允許空(null)鍵(key)或值(value),Hashtable的方法是Synchronize的,在多個線程訪問 Hashtable時,不需要自己為它的方法實現同步,而HashMap 就必須為之提供外同步。 HashtableHashMap采用的hash/rehash算法都大概一樣,所以性能不會有很大的差異。

          3、HashMapHashtable的區別:HashMapHashtable(線程案例的)的輕量級實現(非線程安全的實現),他們都完成了Map接口。主要區別在于HashMap允許空(null)鍵key)或值(value,非同步,由于非線程安全,效率上可能高于Hashtable。

          Map總結:

          是一種把鍵對象和值對象進行關聯的容器,Map有兩種比較常用的實現: HashTableHashMapTreeMap。

          posted on 2011-03-07 14:25 XXXXXX 閱讀(1585) 評論(0)  編輯  收藏 所屬分類: Programing

          主站蜘蛛池模板: 阜城县| 托克逊县| 耒阳市| 武强县| 综艺| 改则县| 滦平县| 海南省| 张北县| 启东市| 晋江市| 柳州市| 保山市| 平武县| 陆丰市| 鹤壁市| 吴川市| 登封市| 天门市| 资中县| 孝感市| 宣城市| 沈阳市| 筠连县| 建昌县| 陆良县| 绥化市| 靖远县| 桂东县| 马公市| 神农架林区| 濮阳县| 和政县| 宁波市| 江北区| 富蕴县| 图木舒克市| 恩平市| 新乡县| 台山市| 永城市|