Java集合List的方法及遍歷方式舉例
List集合的特點(diǎn)
有序:存和取的元素順序一致
有索引:可以通過索引操作元素
可重復(fù):存儲(chǔ)的元素可以重復(fù)
List集合的方法
Collection的方法List都繼承了,可以使用Collection中的方法
此外,List集合因?yàn)橛兴饕?,所以多了很多索引操作的方法?/p>
方法名稱 | 說明 |
void add (int index,E element) | 在此集合中的指定位置插入指定的元素 |
E remove (int index) | 刪除指定索引處的元素,返回被刪除的元素 |
E set (int index,E element) | 修改指定索引處的元素,返回被修改的元素 |
E get (int index) | 返回指定索引處的元素 |
注意:
List集合中的上述方法存在重載現(xiàn)象,一個(gè)是繼承Collection的需要提供的參數(shù)是給定的具體對象,另一個(gè)是List自己的需要提供的參數(shù)是索引,所以出現(xiàn)以下問題。
例如:remove(1),到底是刪除泛型是<Integer>集合中的元素1,還是刪除1索引上的元素
答:優(yōu)先調(diào)用形參和實(shí)參類型一致的方法
代碼演示:
import java.util.ArrayList; import java.util.List; public class Test5 { public static void main(String[] args) { List<Integer> list = new ArrayList<>(); list.add(1); list.add(2); list.add(3); System.out.println(list);//[1, 2, 3] //1是int類型,所以調(diào)用形參是int類型的刪除指定索引處的元素 list.remove(1); System.out.println(list);//[1, 3] //將1變?yōu)镮nteger類型 Integer i = Integer.valueOf(1); //i變量中的1是引用數(shù)據(jù)類型,所以調(diào)用形參是Object類型的刪除指定元素 list.remove(i); System.out.println(list);//[3] } }
List集合的遍歷方式
除了與Collection相同的迭代器遍歷,增強(qiáng)for遍歷,lambda遍歷外,還有普通for遍歷,列表迭代器遍歷。
普通for遍歷
代碼演示
public class Test6 { public static void main(String[] args) { //普通for遍歷 List<String> list = new ArrayList<>(); list.add("aaa"); list.add("bbb"); list.add("ccc"); for (int i = 0; i < list.size(); i++) { String str = list.get(i); System.out.println(str); } //aaa //bbb //ccc } }
列表迭代器遍歷
說明
列表迭代器ListIterator繼承自迭代器Iterator,
獲取列表迭代器
方法名稱 | 說明 |
ListIterator<E> listIterator () | 返回迭代器對象默認(rèn)指向當(dāng)前集合的0索引 |
常用方法
方法名 | 說明 |
boolean hasNext () | 正向遍歷列表 判斷當(dāng)前位置是否有元素, 有元素返回true,沒有元素返回false |
E next () | 獲取當(dāng)前位置的元素 并將迭代器對象移向下一個(gè)位置。 |
boolean hasPrevious () | 逆向遍歷列表 判斷當(dāng)前位置是否有元素, 有元素返回true,沒有元素返回false(了解) |
E previous () | 獲取當(dāng)前位置的元素 并將迭代器對象移向上一個(gè)位置。(了解) |
vold add (E e) | 將指定的元素插入列表 |
void remove () | 刪除獲取到的元素 |
代碼演示
import java.util.ArrayList; import java.util.List; import java.util.ListIterator; public class Test6 { public static void main(String[] args) { List<String> list = new ArrayList<>(); list.add("aaa"); list.add("bbb"); list.add("ccc"); //遍歷打印 ListIterator<String> lit1 = list.listIterator(); while (lit1.hasNext()) { String str = lit1.next(); System.out.println(str); } //aaa //bbb //ccc //遍歷添加:在aaa的后面添加ddd ListIterator<String> lit2 = list.listIterator(); while (lit2.hasNext()) { String s = lit2.next(); if (s.equals("aaa")) { lit2.add("ddd"); } } System.out.println(list);//[aaa, ddd, bbb, ccc] } }
ArrayList集合底層原理
底層數(shù)據(jù)結(jié)構(gòu)是數(shù)組,查詢快,增刪慢
1.利用空參創(chuàng)建的集合,在底層創(chuàng)建一個(gè)默認(rèn)長度為0的數(shù)組
2.添加第一個(gè)元素時(shí),底層會(huì)創(chuàng)建一個(gè)新的長度為10的數(shù)組
3.存滿時(shí),會(huì)擴(kuò)容1.5倍
4.如果一次添加多個(gè)元素,1.5倍還放不下,則新創(chuàng)建數(shù)組的長度以實(shí)際為準(zhǔn)
LinkedList集合底層原理
底層數(shù)據(jù)結(jié)構(gòu)是雙向鏈表,查詢慢,增刪快,但是如果操作的是首尾元素,速度也是極快的
因此LinkedList本身多了很多直接操作首尾元素的特有API,所以除了繼承自Collection和List中的方法,還有以下方法
特有方法 | 說明 |
public void addFirst(E e) | 在該列表開頭插入指定的元素 |
public void addLast(E e) | 將指定的元素追加到此列表的末尾 |
public E getFirst() | 返回此列表中的第一個(gè)元素 |
public E getLast() | 返回此列表中的最后一個(gè)元素 |
public E removeFirst() | 從此列表中刪除并返回第一個(gè)元素 |
public E removeLast() | 從此列表中刪除并返回最后一個(gè)元素 |
總結(jié)
到此這篇關(guān)于Java集合List的方法及遍歷方式的文章就介紹到這了,更多相關(guān)Java集合List內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
關(guān)于SpringMVC的異常處理機(jī)制詳細(xì)解讀
這篇文章主要介紹了關(guān)于SpringMVC的異常處理機(jī)制詳細(xì)解讀,SpringMVC是目前主流的Web?MVC框架之一,本文將分析SpringMVC的異常處理內(nèi)容,需要的朋友可以參考下2023-05-05java 后臺(tái)將base64字符串保存為圖片的方法
本篇文章主要介紹了java 后臺(tái)將base64字符串保存為圖片的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-09-09springcloud?feign服務(wù)之間調(diào)用,date類型轉(zhuǎn)換錯(cuò)誤的問題
這篇文章主要介紹了springcloud?feign服務(wù)之間調(diào)用,date類型轉(zhuǎn)換錯(cuò)誤的問題及解決,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-03-03使用Java構(gòu)造和解析Json數(shù)據(jù)的兩種方法(詳解一)
JSON(JavaScript Object Notation) 是一種輕量級的數(shù)據(jù)交換格式,采用完全獨(dú)立于語言的文本格式,是理想的數(shù)據(jù)交換格式。接下來通過本文給大家介紹使用Java構(gòu)造和解析Json數(shù)據(jù)的兩種方法,需要的朋友參考下吧2016-03-03Spring?注入集合實(shí)現(xiàn)過程示例詳解
這篇文章主要為大家介紹了Spring?注入集合實(shí)現(xiàn)過程示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-09-09JAVA代碼調(diào)用ffmpeg程序進(jìn)行視頻轉(zhuǎn)碼和推流方式
本文介紹了如何通過Java代碼調(diào)用FFmpeg進(jìn)行多媒體視頻處理,包括兩種方式:使用第三方封裝的jar包和使用ProcessBuilder類創(chuàng)建進(jìn)程,兩種方式各有優(yōu)缺點(diǎn),選擇時(shí)需根據(jù)具體需求和場景2025-02-02