Java超詳細(xì)講解ArrayList與順序表的用法
簡要介紹
順序表是一段物理地址連續(xù)的儲存空間,一般情況下用數(shù)組儲存,并在數(shù)組上完成增刪查改。而在java中我們有ArrayList這個容器類封裝了順序表的方法。
在集合框架中,ArrayList是一個普通的類,其實現(xiàn)了list接口。其源碼類定義如圖
可見,其實現(xiàn)了RandomAccess, Cloneable, 以及Serializable接口,分別代表了其支持隨機訪問,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進行初始化(此處是ArrayList) List<Integer> list3 = new ArrayList<>(list1);
ArrayList的常見方法
方法 | 解釋 |
---|---|
boolean add(E e) | 尾插e |
void add(int index, E element) | 將 e 插入到 index 位置 |
boolean addAll(Collection<? extends E> c) | 將集合 c 中的元素 尾插到該集合中 |
E remove(int index) | 刪除 index 位置元素并返回 |
boolean remove(Object o) | 刪除遇到的第一個 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) | 返回第一個 o 所在下標(biāo) |
int lastIndexOf(Object o) | 返回最后一個 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("盛夏");//刪除遇到的第一個元素“盛夏”,刪除成功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("盛夏");//返回第一個 "盛夏" 所在下標(biāo) list.lastIndexOf("盛夏");// 返回最后一個 "盛夏" 的下標(biāo) //截取list的[0,1)為subList,注意區(qū)間左閉右開 List<String> subList = list.subList(0,1);
注:此處的subList方法只是截取了原list中被截取部分的地址,所以若改變subList元素,原list中元素也會改變。
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中的擴容機制
源碼分析:
1.當(dāng)我們調(diào)用無參構(gòu)造方法,或者參數(shù)為0時,此時的數(shù)組為一個空數(shù)組。
而當(dāng)?shù)谝淮蝍dd的時候,底層的數(shù)組容量才變成了10;
2.后續(xù)若在需擴容,按照1.5倍擴容
即:
1.無參構(gòu)造方法,或參數(shù)為零構(gòu)造方法,底層數(shù)組為0,第一次add后,底層數(shù)組為10,10個放滿后以1.5倍擴容
2.參數(shù)大于零的構(gòu)造方法,底層數(shù)組為參數(shù),數(shù)組放滿后,以1.5倍擴容。
到此這篇關(guān)于Java超詳細(xì)講解ArrayList與順序表的用法的文章就介紹到這了,更多相關(guān)Java ArrayList與順序表內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Spring Boot中實現(xiàn)定時任務(wù)應(yīng)用實踐
定時任務(wù)一般是項目中都需要用到的,可以用于定時處理一些特殊的任務(wù)。下面這篇文章主要給大家介紹了關(guān)于Spring Boot中實現(xiàn)定時任務(wù)應(yīng)用實踐的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下。2018-05-05SpringBoot使用@Async注解實現(xiàn)異步調(diào)用
這篇文章主要介紹了SpringBoot使用@Async注解實現(xiàn)異步調(diào)用,異步調(diào)用是相對于同步調(diào)用而言的,同步調(diào)用是指程序按預(yù)定順序一步步執(zhí)行,每一步必須等到上一步執(zhí)行完后才能執(zhí)行,異步調(diào)用則無需等待,程序執(zhí)行完即可執(zhí)行,可以減少程序執(zhí)行時間,需要的朋友可以參考下2023-10-10使用Java代碼將IP地址轉(zhuǎn)換為int類型的方法
這篇文章主要介紹了使用Java代碼將IP地址轉(zhuǎn)換為int類型的方法,這也是各大計算機考試和ACM以及面試的常見基礎(chǔ)問題,需要的朋友可以參考下2015-08-08java中FileOutputStream中文亂碼問題解決辦法
這篇文章主要介紹了java中FileOutputStream中文亂碼問題解決辦法的相關(guān)資料,需要的朋友可以參考下2017-04-04