java list和數(shù)組的區(qū)別

java list和數(shù)組的區(qū)別百科

List和ArrayList的區(qū)別在于:
1、在編程語言中ArrayList類是.Net Framework提供的用于數(shù)據(jù)存儲和檢索的專用類。List 類可以簡單視之為雙向連結(jié)串行,以線性列的方式管理物件**。

List類是ArrayList類的泛型等效類。

2、ArrayList繼承了IList接口,所以它可以很方便的進行數(shù)據(jù)的添加,插入和移除。List的大部分用法都與ArrayList相似,List類也繼承了IList接口。
3、在ArrayList中可以插入不同類型的數(shù)據(jù)。ArrayList會把所有插入其中的數(shù)據(jù)都當(dāng)作為object類型來處理,這其中存在裝箱與拆箱的操作,會對系統(tǒng)造成性能上的損耗。

而List需要聲明其數(shù)據(jù)的對象類型。聲明后插入其他類型數(shù)據(jù),IDE就會報錯,且不能通過編譯。

4、在使用ArrayList中的數(shù)據(jù)來處理問題的時候,很可能會報類型不匹配的錯誤,即ArrayList不是類型安全的。

而List已經(jīng)聲明過其數(shù)據(jù)的對象類型,是類型安全的,避免了前面講的類型安全問題與裝箱拆箱的性能問題。

5、ListArray就可以被構(gòu)造。而List不能被構(gòu)造,但可以為List創(chuàng)建一個引用。

擴展資料:
一、List泛型
通過允許指定泛型類或方法操作的特定類型,泛型功能將類型安全的任務(wù)從程序員轉(zhuǎn)移給了編譯器。不需要編寫代碼來檢測數(shù)據(jù)類型是否正確,因為會在編譯時強制使用正確的數(shù)據(jù)類型。減少了類型強制轉(zhuǎn)換的需要和運行時錯誤的可能性。

泛型提供了類型安全但沒有增加多個實現(xiàn)的開銷。
二、裝箱與拆箱的概念:
1、裝箱:就是將值類型的數(shù)據(jù)打包到引用類型的實例中 比如將int類型的值123賦給object對象o
int i=123; object o=(object)i;
2、拆箱:就是從引用數(shù)據(jù)中提取值類型 比如將object對象o的值賦給int類型的變量i
object o=123; int i=(int)o;
3、裝箱與拆箱的過程是很損耗性能的。

數(shù)組、ArrayList、List三者的區(qū)別

注:學(xué)習(xí)筆記,用于翻看查找 一、 數(shù)組 優(yōu)點:在內(nèi)存中時連續(xù)的,速度較快,操作簡單。 缺點:定義數(shù)組時要定義其長度,不是很靈活,過長過短都會造成問題。

不方便進行數(shù)據(jù)的添加、插入和移除。

例如:int [] i=new int[2]; i[0]=111; i[1]=123;//賦值 i[1]=1234;//修改 二、**ArrayList 優(yōu)點:命名空間System.Collections下的一部分。大小是動態(tài)擴充與收縮的。在聲明ArrayList對象時不需要指定它的長度。ArrayList繼承了IList接口,可以很方便的進行數(shù)據(jù)的添加、插入和移除. 缺點:當(dāng)向**插入不同類型的數(shù)據(jù)后(ArrayList將數(shù)據(jù)當(dāng)作object存儲),在進行數(shù)據(jù)處理時容易出現(xiàn)類型不匹配的錯誤,使用時需要進行類型轉(zhuǎn)換處理,存在裝箱與拆箱操作,造成性能大量損耗的現(xiàn)象。

例如:ArrayList list = new ArrayList(); list.Add(“aa”); list.Add(11); list[1] = 123;//修改 移除list.Remove(123); list.RemoveAt(0); 三、泛型List 優(yōu)點:與**ArrayList類似且繼承IList接口,在聲明List**時也要聲明**內(nèi)部數(shù)據(jù)的對象類型,避免了裝箱和拆箱的問題。 例如:List<int> list=new List<int>(); list.Add(123); list[0]=111;//修改 list.RemoveAt(0);//移除 如果list.Add(“abc”);//編譯器就會報錯,避免了類型安全問題與裝箱拆箱的性能問題。

數(shù)組、List中不同類的區(qū)別

1、Vector是線程安全的,方法使用synchronized關(guān)鍵字修飾。ArrayList不是。

2、當(dāng)需要擴容時,ArrayList擴容原來的0.5倍,Vector擴容原來的1倍。

1、Array可以存儲對象或者基本數(shù)據(jù)類型,但是ArrayList只能存儲對象。 2、Array是固定大小的,ArrayList是可以自動擴展的。 3、Array的內(nèi)置方法沒有ArrayList多。 相同點: 都返回隊列的**個元素,并從隊列中刪除這個元素。

不同點: 如果Queue為空,poll返回null。remove 拋出NoSuchElementException異常。 LinkedList:雙向鏈表 HashMap:數(shù)組+單向鏈表+紅黑樹 HashSet:HashMap LinkedHashMap:使用HashMap存儲數(shù)據(jù),使用LinkedList存儲順序。

HashMap 允許 key 和 value 為 null,Hashtable 不允許。 HashMap 的默認(rèn)初始容量為 16,Hashtable 為 11。 HashMap 的擴容為原來的 2 倍,Hashtable 的擴容為原來的 2 倍加 1。

HashMap 是非線程安全的,Hashtable是線程安全的。 HashMap 的 hash 值重新計算過,Hashtable 直接使用 hashCode。 HashMap 去掉了 Hashtable 中的 contains 方法。

HashMap 繼承自 AbstractMap 類,Hashtable 繼承自 Dictionary 類。

關(guān)于Array和List的區(qū)別

在Java中 Array是數(shù)組,List是**。數(shù)組直接可以使用,List是借口,需要使用實現(xiàn)類,比如:ArrayList。

使用方式也不同,Array數(shù)組使用下標(biāo)獲取元素,List是get(index)初始化Array數(shù)組必須指定大小,不靈活。

List 可以自己擴充大小,方便。