數組Array和集合的區別: (1)數組是大小固定的,而且同一個數組只能存放類型同樣的數據(基本類型/引用類型) (2)JAVA集合能夠存儲和操做數目不固定的一組數據。 (3)若程序時不知道究竟須要多少對象,須要在空間不足時自動擴增容量,則須要使用容器類庫,array不適用。 聯繫:使用相應的toArray()和Arrays.asList()方法能夠回想轉換。 一.集合的體系結構: List、Set、Map是這個集合體系中最主要的三個接口。 List和Set繼承自Collection接口。 Map也屬於集合系統,但和Collection接口不一樣。 Set不容許元素重複。HashSet和TreeSet是兩個主要的實現類。Set 只能經過遊標來取值,而且值是不能重複的。 List有序且容許元素重複。ArrayList、LinkedList和Vector是三個主要的實現類。 ArrayList 是線程不安全的, Vector 是線程安全的,這兩個類底層都是由數組實現的 LinkedList 是線程不安全的,底層是由鏈表實現的 Map 是鍵值對集合。其中key列就是一個集合,key不能重複,可是value能夠重複。 HashMap、TreeMap和Hashtable是Map的三個主要的實現類。 HashTable 是線程安全的,不能存儲 null 值 HashMap 不是線程安全的,能夠存儲 null 值 二.List和ArrayList的區別 1.List是接口,List特性就是有序,會確保以必定的順序保存元素. ArrayList是它的實現類,是一個用數組實現的List. Map是接口,Map特性就是根據一個對象查找對象. HashMap是它的實現類,HashMap用hash表實現的Map,就是利用對象的hashcode(hashcode()是Object的方法)進行快速散列查找.(關於散列查找,能夠參看<<數據結構>>) 2.通常狀況下,若是沒有必要,推薦代碼只同List,Map接口打交道. 好比:List list = new ArrayList(); 這樣作的緣由是list就至關因而一個泛型的實現,若是想改變list的類型,只須要: List list = new LinkedList();//LinkedList也是List的實現類,也是ArrayList的兄弟類 這樣,就不須要修改其它代碼,這就是接口編程的優雅之處. 另外的例子就是,在類的方法中,以下聲明: private void doMyAction(List list){} 這樣這個方法能處理全部實現了List接口的類,必定程度上實現了泛型函數. 3.若是開發的時候以爲ArrayList,HashMap的性能不能知足你的須要,能夠經過實現List,Map(或者Collection)來定製你的自定義類.
三。圖示說明:html
注:圖參來之http://www.cnblogs.com/xiaoqv/archive/2011/11/24/2262142.html編程
int[] m = { 1, 2, 3 };
String[] strings = { "aaa", "bbb" };
List<String> list = new ArrayList<String>();
List<Integer> lists = new ArrayList<Integer>();
List<Map<String, Object>> list2 = new ArrayList<Map<String,Object>>();
List<City> listcity = new ArrayList<City>();數組