Java 中的List
和Array
都是常用的數(shù)據(jù)結(jié)構(gòu),其主要的區(qū)別在于數(shù)據(jù)的存儲(chǔ)和使用上有所不同。
首先,Array
是一個(gè)固定長(zhǎng)度的序列,其每個(gè)元素在內(nèi)存中是連續(xù)存儲(chǔ)的。當(dāng)創(chuàng)建一個(gè)數(shù)組時(shí),必須指定其大小。對(duì)于數(shù)組的讀取和寫入是非常快速的,因?yàn)榭梢灾苯痈鶕?jù)下標(biāo)索引來訪問任意的元素。數(shù)組的缺點(diǎn)就是其長(zhǎng)度一旦確定,就無法動(dòng)態(tài)地改變大小。
int[] arr = new int[5]; // 創(chuàng)建長(zhǎng)度為5的整型數(shù)組
arr[0] = 1; // 訪問數(shù)組元素的方法是用中括號(hào)+下標(biāo)的方式
相反,List
是一個(gè)可變的序列,其長(zhǎng)度可以隨著元素的添加和刪除而動(dòng)態(tài)改變。 Java 中自帶了很多的列表類型,如ArrayList
、LinkedList
、Vector
等。其中,ArrayList
是一種常用的列表類型,其底層實(shí)現(xiàn)是基于Array
的方式,因此其訪問元素的速度也非常快。
ArrayList<Integer> list = new ArrayList<>(); // 創(chuàng)建一個(gè)整型列表
list.add(1); // 添加元素的方法是 add()
int element = list.get(0); // 獲取元素的方法是 get()
總而言之,Array
的長(zhǎng)度是固定并且在內(nèi)存中是連續(xù)存儲(chǔ)的,訪問元素速度快。而List
的長(zhǎng)度可以改變,其實(shí)現(xiàn)方式有多種,其中ArrayList
底層仍然使用了Array
的方式,但是其動(dòng)態(tài)擴(kuò)容的機(jī)制使其非常靈活和強(qiáng)大。