java基礎——Collection

一、類集框架

    類集框架,是一組類和接口,存在於java.util中,主要用於存儲和管理對象。

    JAVA2之前,Java提供了一些專門的類如:DictionaryVectorStackProperties存儲和操作對象組。儘管這些類非常有用,但是它們缺少一個集中,統一的主題。舉例:Vector的方法與Properties的方法不同。這些專門的類都都有各自專門的方法,沒有被設計成易於擴展和能適應新的環境的形式。

類集框架特點:

         1.最底層存在Collection接口,在Collection接口中統一封裝了實現類需要實現的方法。

         2.是高性能的。對基本類集(動態數組、鏈接表、樹、散列表)的實現是高效的,很少需要人工去對這些“數據引擎”編寫代碼。

         3.框架允許不同類型的類集以相同的方式和高度互操作方式工作。

         4.類集必須是容易擴展、修改的。

所以,類集框架被設計成包含一組標準的接口。對這些接口提供了標準的實現類。

 

                                                               

二、框架詳細介紹

1.Collection接口:是構造類集框架的基礎。它聲明所有類集都將擁有的核心方法。所有的類集實現Collection。

add:可以將對象加入到類集。這個方法帶一個Object類型參數。因爲Object是所有類的超累,所以任何類型的對象可以被存儲在一個類型中。但是,不能直接存儲類型int,char,double等(上篇博客提到的主數據類型)的值。如果要使用這些類型,則使用對象,比如new Integer(1);

iterator:該方法返回一個實現Iterator接口的對象,稱作迭代器。用以方便的實現容器內元素的遍歷操作。

Iterator it =collection.iterator();//得到一個迭代器

Boolean isExist =it.hasNext();//判斷右邊右邊是否有元素。

object  obj = it.next();//返回右邊右邊的元素,並將遊標移動到下一個位置

it.remove();//刪除右邊左邊的元素。在執行完next之後該操作只能操作執行一次

 注意:容器類對象在調用remove、contains等方法時需要比較對象是否相等。這會涉及到對象類型的equals方法和hashcode方法。對於自定義的類型,需要重寫equalshashcode方法以實現自定義的對象相等規則。相等的對象應該具有相等的hashcode

 

2.List接口:

           List是有序的Collection,使用此接口能精確的控制每個元素插入的位置。用戶能夠使用索引(元素在List中的位置,類似於數組下標)來訪問List中的元素。List允許有相同的元素。

ArrayList類:

          實現了動態地增加和減少數組的元素,靈活設置數組的大小。每個ArrayList實例都有一個容量。該容量是指用來存儲列表元素的數組的大小。它總是至少等於列表的大小。隨着向ArrayList中不斷添加元素,其容量也自動增長。

LinkedList類:

          是一種雙向的鏈式結構。相對ArrayList而言,LinkedList的插入和刪除元素相對方便,但速度較慢。

vector類:

          ArrayList和vector操作接口基本一致,區別在於內部的實現上。ArrayList採用異步處理的方式,相對於Vector的同步方式,速度比較快。但Vector是線程安全的。

 

ArrayList接口、LinkedList接口、Vector類對比:

 http://blog.csdn.net/xujiaolf/article/details/35227525

3.Set接口

          Set是一種不包含重複的元素的Collection。

HashSet:

          泛型類必須覆寫來自Object類的hashCode(),equals(Objectobj)方法;將根據hashCode,equals判斷是否重複從而不保存重複的元素;

TreeSet:

        前提,泛型類必須實現Comarable接口,元素是否重複根據compareTo方法定義的規則判斷,重複的元素添加將失敗!

示例鏈接:http://hi.baidu.com/amenmen/item/85a3bef304b3d415ce9f3236

 

4.Map接口

             Map沒有繼承Collection接口,在數組中我們是通過數組下標來對其內容索引的,而在Map中我們通過對象來對對象進行索引,用來索引的對象叫做key,其對應的對象叫做value。這就是我們平時說的鍵值對Map提供key到value的映射。一個Map中不能包含相同的key,每個key只能映射一個value。

HashMap:

         它根據鍵的HashCode值存儲數據,根據鍵可以直接獲取它的值,具有很快的訪問速度。HashMap最多隻允許一條記錄的鍵爲Null(多條會覆蓋);允許多條記錄的值爲Null。非同步的。

TreeMap:

        能夠把它保存的記錄根據鍵(key)排序,默認是按升序排序,也可以指定排序的比較器,當用Iterator遍歷TreeMap時,得到的記錄是排過序的。TreeMap不允許key的值爲null。非同步的。

Hashtable:

         與HashMap類似,不同的是:key和value的值均不允許爲null;它支持線程的同步,即任一時刻只有一個線程能寫Hashtable,因此也導致了Hashtale在寫入時會比較慢。

總結:

HashMap通常比TreeMap快一點(樹和哈希表的數據結構使然),建議多使用HashMap,在需要排序的Map時候才用TreeMap。

 

示例:

Java:HashMap,TreeMap,Hashtable一些簡單介紹;

http://hi.baidu.com/personnel/item/3a8081941271dbd91a49df29

Java中HashMap和TreeMap的區別深入理解:

http://www.jb51.net/article/32652.htm

 

參考:

java_Collection_介紹: http://blog.sina.com.cn/s/blog_3fb3625f0101aref.html

Java Collection: http://skyuck.iteye.com/blog/526358

 

發佈了106 篇原創文章 · 獲贊 78 · 訪問量 29萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章