不逼自己一把,你永遠不知道什么是絕望。
今天被初學java的朋友問到了String[]跟ArrayList是不是有關系呢?
猜測是名稱之間的聯想,記此篇解惑。
Array英語單詞里是數組、陣列的意思,在java中數組是這樣定義的:一組相關類型的變量集合。
格式:數據類型[] 數組名稱 = new 數據類型[長度];
根據上邊的格式,列舉幾個常見的數組,比如:String[] int[],如下是數組一些特點:
- 數組長度是固定的,無法實現動態擴容;
- 數組下標(從0開始)超出數組長度,數組越界異常(運行時異常);
- 數組中每個元素都有默認值,默認值是該數據類型默認值;
- 數組名稱.length(屬性):取得數組長度;
看完了上邊的數組特點,再來看看ArrayList吧,他又是個啥呢?
ArrayList就是動態數組,用MSDN中的說法,就是Array的復雜版本,它提供了動態的增加和減少元素,實現了ICollection和IList接口,靈活的設置數組的大小等好處 --- 百度百科
所以,看到這,已經明確String[]跟ArrayList是有點關系的了……
ArrayList是一個數組隊列,相當於動態數組,與Java中的數組不同,數組一旦創建,長度固定,但是ArrayList的長度是動態的,不受限制,可以存儲任意多的對象,但是只能存儲對象,不能存儲原生數據類型例如int(基本數據類型)。
如下是ArrayList的關系圖:

- 繼承於AbstractList,實現了List,提供了相關的添加、刪除、修改、遍歷等功能。
- 實現了RandmoAccess接口,即提供了隨機訪問的功能。RandmoAccess是java中用來被List實現,為List提供快速訪問功能的。在ArrayList中,我們即可以通過元素的序號快速獲取元素對象;這就是快速隨機訪問。
- 實現了Cloneable接口,即覆蓋了函數clone(),能被克隆。
- 實現了java.io.Serializable接口,這意味着ArrayList支持序列化,能通過序列化去傳輸。
總之,ArrayList是非常重要的一個類,在代碼中被廣泛使用。
點個題,看一下數組與ArrayList的比較:
操作 | Array(String[]) | ArrayList |
---|---|---|
創建 | String[] array = new String[10]; | ArrayList list = new ArrayList<>(); |
訪問一個元素 | array[index] | list.get(index); |
更新一個元素 | array[index] = "niceyoo"; | list.set(index, "niceyoo"); |
返回大小 | array.length | list.size(); |
排序 | java.util.Arrays.sort(array) | java.util.Collections.sort(arraylist) |
添加一個新元素 | 相當復雜 | list.add("niceyoo"); |
插入一個新元素 | 相當復雜 | list.add(index, "niceyoo"); |
刪除一個元素 | 相當復雜 | list.remove(index); |
刪除一個元素 | 相當復雜 | list.remove(Object); |
刪除所有元素 | 稍微復雜 | list.clear(); |
我創建了一個用來記錄自己學習之路的公眾號,感興趣的小伙伴可以關注一下微信公眾號:niceyoo
