Java之Collection Framework

來源:互聯網
上載者:User

       數組類Array。是JAVA中最基本的一個儲存結構。它用於儲存一組連續的對象或基本類型的資料。其中的元素的類型必須相同。array是最有效率的一種。1、效率高,但容量固定且無法動態改變。 array還有一個缺點是,無法判斷其中實際存有多少元素,length只是告訴我們array的容量。 2、JAVA中有一個Arrays類,專門用來操作array ,提供搜尋、排序、複製等靜態方法。 equals():比較兩個array是否相等。array擁有相同元素個數,且所有對應元素兩兩相等。 fill():將值填入array中。 sort():用來對array進行排序。 binarySearch():在排好序的array中尋找元素。 System.arraycopy():array的複製。

      Java Collections Framework成員主要包括兩種類型,即:Collection和Map類型。 在Java中提供了Collection和Map介面。其中List和Set繼承了Collection介面;同時用Vector、ArrayList、LinkedList三個類實現List介面,HashSet、TreeSet實現Set介面。直接有HashTable、HashMap、TreeMap實現Map介面。由此可見,Java中用8種類型的基本資料結構來實現其Collections Framework;下面分別進行介紹。

      Vector基於Array的List,效能也就不可能超越Array,並且Vector是“sychronized”的,這個也是Vector和ArrayList的唯一的區別。

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

       LinkedList:LinkedList不同於前面兩種List,它不是基於Array的,所以不受Array效能的限制。它每一個節點(Node)都包含兩方面的內容:1.節點本身的資料(data);2.下一個節點的資訊(nextNode)。所以當對LinkedList做添加,刪除動作的時候就不用像基於Array的List一樣,必須進行大量的資料移動。只要更改nextNode的相關資訊就可以實現了所以它適合於進行頻繁進行插入和刪除操作。這就是LinkedList的優勢。Iterator只能對容器進行向前遍曆,而 ListIterator則繼承了Iterator的思想,並提供了對List進行雙向遍曆的方法。

       List:1. 所有的List中只能容納單個不同類型的對象組成的表,而不是Key-Value索引值對。例如:[ tom,1,c ]; 2. 所有的List中可以有相同的元素,例如Vector中可以有 [ tom,koo,too,koo ]; 3. 所有的List中可以有null元素,例如[ tom,null,1 ]; 4. 基於Array的List(Vector,ArrayList)適合查詢,而LinkedList(鏈表)適合添加,刪除操作。

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

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

      Set總結: 1. Set實現的基礎是Map(HashMap); 2. Set中的元素是不能重複的,如果使用add(Object obj)方法添加已經存在的對象,則會覆蓋前面的對象; Set裡的元素是不能重複的,那麼用什麼方法來區分重複與否呢? 是用==還是equals()? 它們有何區別? Set裡的元素是不能重複的,即不能包含兩個元素e1、e2(e1.equals(e2))。那麼用iterator()方法來區分重複與否。equals()是判讀兩個Set是否相等。==方法決定引用值(控制代碼)是否指向同一對象。

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

      HashMap也用到了雜湊碼的演算法,以便快速尋找一個鍵,TreeMap則是對鍵按序存放,因此它有一些擴充的方法,比如firstKey(),lastKey()等。HashMap和Hashtable的區別。 HashMap是Hashtable的輕量級實現(非安全執行緒的實現),他們都完成了Map介面。主要區別在於HashMap允許空(null)鍵(key)或值(value),非同步,由於非安全執行緒,效率上可能高於Hashtable。 Hashtable不允許空(null)鍵(key)或值(value),Hashtable的方法是Synchronize的,在多個線程訪問Hashtable時,不需要自己為它的方法實現同步,而HashMap 就必須為之提供外同步。 Hashtable和HashMap採用的hash/rehash演算法都大概一樣,所以效能不會有很大的差異。

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.