Java超詳細(xì)講解ArrayList與順序表的用法
簡要介紹
順序表是一段物理地址連續(xù)的儲(chǔ)存空間,一般情況下用數(shù)組儲(chǔ)存,并在數(shù)組上完成增刪查改。而在java中我們有ArrayList這個(gè)容器類封裝了順序表的方法。
在集合框架中,ArrayList是一個(gè)普通的類,其實(shí)現(xiàn)了list接口。其源碼類定義如圖

可見,其實(shí)現(xiàn)了RandomAccess, Cloneable, 以及Serializable接口,分別代表了其支持隨機(jī)訪問,clone,以及序列化。
Arraylist容器類的使用
Arraylist容器類的構(gòu)造

public static void main(String[] args) {
//無參數(shù)的構(gòu)造方法
List<Integer> list1 = new ArrayList<>();
//指定初始容量的構(gòu)造方法
List<Integer> list2 = new ArrayList<>();
list1.add(1);
list1.add(2);
list1.add(3);
//使用其他collection進(jìn)行初始化(此處是ArrayList)
List<Integer> list3 = new ArrayList<>(list1);ArrayList的常見方法
| 方法 | 解釋 |
|---|---|
| boolean add(E e) | 尾插e(cuò) |
| void add(int index, E element) | 將 e 插入到 index 位置 |
| boolean addAll(Collection<? extends E> c) | 將集合 c 中的元素 尾插到該集合中 |
| E remove(int index) | 刪除 index 位置元素并返回 |
| boolean remove(Object o) | 刪除遇到的第一個(gè) o |
| E get(int index) | 獲取下標(biāo) index 位置元素 |
| E set(int index, E element) | 將下標(biāo) index 位置元素設(shè)置為 element |
| void clear() | 清空順序表 |
| boolean contains(Object o) | 判斷 o 是否在線性表中 |
| int indexOf(Object o) | 返回第一個(gè) o 所在下標(biāo) |
| int lastIndexOf(Object o) | 返回最后一個(gè) o 的下標(biāo) |
| List< E > subList(int fromIndex, int toIndex) | 截取部分 list |
List<String> list = new ArrayList<>();
list.add("盛夏");// 尾插元素 “盛夏”
list.add(1,"洋光");//在1下標(biāo)處插入元素 “洋光”
list.addAll(list);//將list中的元素全部尾插
list.remove(0);//刪除0下標(biāo)處的元素
boolean flg = list.remove("盛夏");//刪除遇到的第一個(gè)元素“盛夏”,刪除成功flg為true,刪除失敗flg為false;
String s = list.get(0);//獲取0下標(biāo)處的元素
list.set(0,"盛夏");//將0下標(biāo)元素設(shè)為 “盛夏”
boolean flg1 = list.contains("盛夏");//查詢“盛夏”是否在順序表內(nèi),存在flg1為true,不存在flg1為false;
list.indexOf("盛夏");//返回第一個(gè) "盛夏" 所在下標(biāo)
list.lastIndexOf("盛夏");// 返回最后一個(gè) "盛夏" 的下標(biāo)
//截取list的[0,1)為subList,注意區(qū)間左閉右開
List<String> subList = list.subList(0,1);
注:此處的subList方法只是截取了原list中被截取部分的地址,所以若改變subList元素,原list中元素也會(huì)改變。
ArrayList的遍歷
循環(huán)遍歷
for-each遍歷
//循環(huán)遍歷
for(int i = 0; i<list.size();i++){
System.out.print(list.get(i)+" ");
}
//for-each 遍歷
for(String i:list){
System.out.print(i+" ");
}ArrayList中的擴(kuò)容機(jī)制
源碼分析:
1.當(dāng)我們調(diào)用無參構(gòu)造方法,或者參數(shù)為0時(shí),此時(shí)的數(shù)組為一個(gè)空數(shù)組。


而當(dāng)?shù)谝淮蝍dd的時(shí)候,底層的數(shù)組容量才變成了10;
2.后續(xù)若在需擴(kuò)容,按照1.5倍擴(kuò)容

即:
1.無參構(gòu)造方法,或參數(shù)為零構(gòu)造方法,底層數(shù)組為0,第一次add后,底層數(shù)組為10,10個(gè)放滿后以1.5倍擴(kuò)容
2.參數(shù)大于零的構(gòu)造方法,底層數(shù)組為參數(shù),數(shù)組放滿后,以1.5倍擴(kuò)容。
到此這篇關(guān)于Java超詳細(xì)講解ArrayList與順序表的用法的文章就介紹到這了,更多相關(guān)Java ArrayList與順序表內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
java List.of()與Arrays.asList()方法對(duì)比分析
這篇文章主要為大家介紹了java List.of()與Arrays.asList()方法對(duì)比分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-11-11
基于Java實(shí)現(xiàn)楊輝三角 LeetCode Pascal''s Triangle
這篇文章主要介紹了基于Java實(shí)現(xiàn)楊輝三角 LeetCode Pascal's Triangle的相關(guān)資料,需要的朋友可以參考下2016-01-01
使用springboot aop記錄接口請求的參數(shù)及響應(yīng)
該文章介紹了如何使用SpringAOP的切面注解,如@Before和@AfterReturning,來記錄Controller層的方法輸入?yún)?shù)和響應(yīng)結(jié)果,還討論了@Around注解的靈活性,允許在方法執(zhí)行前后進(jìn)行更多控制,需要的朋友可以參考下2024-05-05
MyBatis?在使用上的注意事項(xiàng)及其辨析(最新最全整理)
這篇文章主要介紹了MyBatis的在使用上的注意事項(xiàng)及其辨析,本文內(nèi)容比較長,是小編用心給大家整理的,圖文實(shí)例代碼相結(jié)合給大家講解的非常詳細(xì),需要的朋友參考下吧2024-06-06
Spring Security實(shí)現(xiàn)微信公眾號(hào)網(wǎng)頁授權(quán)功能
這篇文章主要介紹了Spring Security中實(shí)現(xiàn)微信網(wǎng)頁授權(quán),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-08-08
java數(shù)據(jù)結(jié)構(gòu)排序算法之樹形選擇排序詳解
這篇文章主要介紹了java數(shù)據(jù)結(jié)構(gòu)排序算法之樹形選擇排序,結(jié)合具體實(shí)例形式分析了java樹形選擇排序的原理、實(shí)現(xiàn)技巧與相關(guān)注意事項(xiàng),需要的朋友可以參考下2017-05-05
詳解IDEA中類加載器調(diào)用getResourceAsStream()方法需注意的問題
這篇文章主要介紹了詳解IDEA中類加載器調(diào)用getResourceAsStream()方法需注意的問題,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-02-02
使用Spring Data JDBC實(shí)現(xiàn)DDD聚合的示例代碼
這篇文章主要介紹了使用Spring Data JDBC實(shí)現(xiàn)DDD聚合的示例代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-09-09

