一、什么是數組
數組:Java提供了一個用於存儲相同類型的元素的,固定大小的連續集合數據結構。本質還是一個對象,繼承自Object。
數組是用於存儲數據的集合,儲存相同類型數據的集合。
與單個變量相比(如number0, number1 … number99),數組變量需要使用下標索引來確定數組中某個數據的順序(如numbers[0], numbers1 … numbers[99] )。
數組按照使用可以分為一維數組、二維數組、多維數組
數組的定義 int[] i=new int[5]; int i []=new int[5];
二、什么是集合
集合:存放的都是對象的引用,而非對象本身,出於表達上的便利,我們稱集合中的對象就是指集合中對象的引用(reference)。
集合類型主要有3種:set(集)、list(列表)和map(映射)。 通俗的說,集合就是一個放數據的容器,准確的說是放數據對象引用的容器。
Java SDK不提供直接繼承自Collection的類,java SDK提供的類都是繼承自Collection的“子接口”如List和Set。
不論Collection的實際類型如何,它都支持一個iterator()的方法,該方法返回一個迭代子,使用該迭代子即可逐一訪問Collection中每一個元素。典型的用法如下:
Iterator it = collection.iterator(); // 獲得一個迭代子
while(it.hasNext()) {
Object obj = it.next(); // 得到下一個元素
}
Linked 改快讀慢
Array 讀快改慢
Hash 兩都之間
Collection是集合接口
|————Set子接口:無序,不允許重復。
|————List子接口:有序,可以有重復元素。
區別:Collections是集合類
Set和List對比:
Set:檢索元素效率低下,刪除和插入效率高,插入和刪除不會引起元素位置改變。
List:和數組類似,List可以動態增長,查找元素效率高,插入刪除元素效率低,因為會引起其他元素位置改變。
Set和List具體子類:
Set
|————HashSet:以哈希表的形式存放元素,插入刪除速度很快。
List
|————ArrayList:動態數組
|————LinkedList:鏈表、隊列、堆棧。
Array和java.util.Vector
Vector是一種老的動態數組,是線程同步的,效率很低,一般不贊成使用。
一、collection與Map, collection與collections 區別
Collection 是java集合框架的一個頂級接口,存儲的元素是任意類型的對象。
Map是java集合的映射接口,以鍵值對的形式存儲對象。
Collections 是java集合框架的一個工具類,定義了若干個靜態方法,對集合對象進行操作。
二、ArrayList 與LinkedList ,Arraylist與Vector 區別
都是List的實現類,主要區別是底層的數據結構不同
ArrayList 相當於一個動態數組 ,需要隨機訪問列表中的元素,ArrayList的性能更高
LinkedList 鏈表式數據結構,當需要頻繁的插入,刪除列表中的元素時,性能高
Arraylist與Vector方法幾乎相同,都是List的實現類。
Arraylist 是在jdk1.2時增加的, vector 是在jdk1.0增加的。
vector 線程同步,(同一時刻只能有一個線程訪問)
ArrayList 線程不同步,可以使用 collections.synchronizedList方法實現線程同步
List list=collections.synchronizedList(new arrayList())
三 Hashtable 與HashMap 區別 ,Hashset與treeSet區別
Hashtable 是JDK1.0中的類,JDK1.2實現map接口,
HashMap是JDK1.2中新增的類,實現Map接口
Hashtable 線程同步 ,HashMap不同步,可以使用Collections.synchronizedMap()變成線程同步
Hashtable key 和value值都不能空
HashMap 可以有一個空的key值,多個空的value值
Hashset與treeSet區別
都是set的實現類,保證元素的唯一性不重復
TreeSet能將元素按升序排列
四 ,Set 與List的區別
都是Collection的子接口,
Set中元素不重復,且無須,
List中元素可以重復 且有序
三、數組和集合的優缺點
Array可以包含基本類型和對象類型,ArrayList只能包含對象類型。
Array大小是固定的,ArrayList的大小是動態變化的。
ArrayList提供了更多的方法和特性,比如:addAll(),removeAll(),iterator()等等。
對於基本類型數據,集合使用自動裝箱來減少編碼工作量。但是,當處理固定大小的基本數據類型的時候,這種方式相對比較慢。