java list用法示例詳解
|--List:元素是有序的(怎么存的就怎么取出來,順序不會(huì)亂),元素可以重復(fù)(角標(biāo)1上有個(gè)3,角標(biāo)2上也可以有個(gè)3)因?yàn)樵摷象w系有索引,
|-- ArrayList:底層的數(shù)據(jù)結(jié)構(gòu)使用的是數(shù)組結(jié)構(gòu)(數(shù)組長(zhǎng)度是可變的百分之五十延長(zhǎng))(特點(diǎn)是查詢很快,但增刪較慢)線程不同步
|-- LinkedList:底層的數(shù)據(jù)結(jié)構(gòu)是鏈表結(jié)構(gòu)(特點(diǎn)是查詢較慢,增刪較快)
|-- Vector:底層是數(shù)組數(shù)據(jù)結(jié)構(gòu) 線程同步(數(shù)組長(zhǎng)度是可變的百分之百延長(zhǎng))(無論查詢還是增刪都很慢,被ArrayList替代了)
List:特有的方法,凡是可以操作角標(biāo)的方法都是該體系特有的方法
增
boolean add(int index, E element)
boolean addAll(index,Collection)
public static void List_add(){ ArrayList a1 = new ArrayList(); a1.add("java"); a1.add("php");//List集合中的元素可以重復(fù) a1.add(".net"); System.out.println("原集合:"+a1); a1.add(1, "Flash"); a1.add(0, "ps"); System.out.println(a1); ArrayList a2 = new ArrayList(); a2.add("javascript"); a2.add("3dMax"); a2.add("IBM"); a1.addAll(0, a2); System.out.println(a1); }
刪除指定位置的元素
boolean remove(int index) public static void List_remove(){ ArrayList a1 = new ArrayList(); a1.add("javascript"); a1.add("php"); a1.add("flash"); System.out.println("原集合:"+a1); a1.remove(0); System.out.println(a1); }
修改指定角標(biāo)的元素 set(int index, E element) 返回的是修改的那個(gè)元素
public static void List_set() { ArrayList a1 = new ArrayList(); a1.add("javascript"); a1.add("php"); a1.add(".net"); System.out.println("原集合:"+a1); a1.set(1, "falsh"); System.out.println(a1); }
查
get(int index) 返回列表中指定位置的元素
subList(int fromIndex, int toIndex) 返回列表中指定的 fromIndex(包括 )和 toIndex(不包括)之間的部分元素。
public static void List_get() { ArrayList a1 = new ArrayList(); a1.add("java"); a1.add("php"); a1.add("flash"); System.out.println(a1.get(0));//獲取指定角標(biāo)的元素,有了該方法就可以遍歷該集合中的所有元素 System.out.println(a1.subList(1, 3));//獲取集合中某一部分的元素,包含頭不包含尾 }
List集合特有的迭代器:ListIterator(是Iterator的子接口)
注意:
在迭代時(shí),是不可以通過集合對(duì)象的方法操作集合中的元素
因?yàn)闀?huì)發(fā)生ConcurrentModificationException異常(并發(fā)異常)
所以,在迭代器時(shí),只能用迭代器的方法造作元素
因?yàn)镮terator方法是有限的所以只能對(duì)元素進(jìn)行判斷,取出,刪除的操作
如果想要其他的操作如添加,修改等,就需要使用其子接口,ListIterator
該接口只能通過List集合的listIterator方法獲取
public class ListIteratorDemo { public static void main(String[] args) { ArrayList a1 = new ArrayList(); a1.add("java01"); a1.add("java02"); a1.add("java03"); a1.add("java04"); System.out.println("原集合是:"+a1); /*在迭代過程中準(zhǔn)備添加或者刪除元素 Iterator it = al.iterator(); while (it.hasNext()){ Object obj = it.next(); if (obj.equals("java02")) //al.add("java008");//會(huì)出現(xiàn)并發(fā)異常,因?yàn)榈髡诓僮骷?,不能再用集合的方法操作集合? it.remove();//將java02的引用從集合中刪除了 System.out.println("obj:"+obj); } */ //只有List的listIterator有增,刪,改,查這些功能,因?yàn)橹挥蠰ist有索引 ListIterator li = a1.listIterator(); while (li.hasNext()){ if(li.next().equals("java02")) //li.add("java009"); li.set("java006"); } } }
Vector:枚舉就是Vector特有的取出方式,跟迭代器很像(其實(shí)枚舉和迭代是一樣的) 已經(jīng)被迭代器取代
public class VectorDemo { public static void main(String[] args) { Vector v = new Vector(); v.add("java01"); v.add("java02"); v.add("java03"); v.add("java04"); for(Enumeration en = v.elements();en.hasMoreElements();){ System.out.println(en.nextElement()); } } }
LinkedList:
特有方法:
addFirst();在頭部添加元素 addLast();在尾部添加元素
getFirst(); getLast(); 獲取元素但不刪除元素。如果集合中沒有元素,會(huì)出現(xiàn)NoSuchElementException
removeFirst(); removeLast(); 獲取元素但是刪除元素。如果集合中沒有元素,會(huì)出現(xiàn)NoSuchElementException
在JDK1.6出現(xiàn)了替代方法
offerFirst(); offerLast();
peekFirst(); peekLast(); 獲取元素,但是元素不被刪除。如果集合中沒有元素,會(huì)返回null
pollFirst(); pollLast(); 獲取元素,但是元素被刪除。如果集合中沒有元素,會(huì)返回null
public class LinkedListDemo { public static void main(String[] args) { LinkedList link = new LinkedList(); link.add("java01"); link.add("java02"); link.add("java03"); link.add("java04"); while(!link.isEmpty()){ System.out.println((link.removeLast())); } } }
下面是補(bǔ)充
List的用法
List包括List接口以及List接口的所有實(shí)現(xiàn)類。因?yàn)長(zhǎng)ist接口實(shí)現(xiàn)了Collection接口,所以List接口擁有Collection接口提供的所有常用方法,又因?yàn)長(zhǎng)ist是列表類型,所以List接口還提供了一些適合于自身的常用方法,如表1所示。
表1 List接口定義的常用方法及功能
從表1可以看出,List接口提供的適合于自身的常用方法均與索引有關(guān),這是因?yàn)長(zhǎng)ist集合為列表類型,以線性方式存儲(chǔ)對(duì)象,可以通過對(duì)象的索引操作對(duì)象。
List接口的常用實(shí)現(xiàn)類有ArrayList和LinkedList,在使用List集合時(shí),通常情況下聲明為L(zhǎng)ist類型,實(shí)例化時(shí)根據(jù)實(shí)際情況的需要,實(shí)例化為ArrayList或LinkedList,例如:
List<String> l = new ArrayList<String>();// 利用ArrayList類實(shí)例化List集合
List<String> l2 = new LinkedList<String>();// 利用LinkedList類實(shí)例化List集合
1.a(chǎn)dd(int index, Object obj)方法和set(int index, Object obj)方法的區(qū)別
在使用List集合時(shí)需要注意區(qū)分add(int index, Object obj)方法和set(int index, Object obj)方法,前者是向指定索引位置添加對(duì)象,而后者是修改指定索引位置的對(duì)象,例如執(zhí)行下面的代碼:
src/com/mwq/TestCollection.java關(guān)鍵代碼:
public static void main(String[] args) { String a = "A", b = "B", c = "C", d = "D", e = "E"; List<String> list = new LinkedList<String>(); list.add(a); list.add(e); list.add(d); list.set(1, b);// 將索引位置為1的對(duì)象e修改為對(duì)象b list.add(2, c);// 將對(duì)象c添加到索引位置為2的位置 Iterator<String> it = list.iterator(); while (it.hasNext()) { System.out.println(it.next()); } }
在控制臺(tái)將輸出如下信息:
A
B
C
D
因?yàn)長(zhǎng)ist集合可以通過索引位置訪問對(duì)象,所以還可以通過for循環(huán)遍歷List集合,例如遍歷上面代碼中的List集合的代碼如下:
src/com/mwq/TestCollection.java關(guān)鍵代碼:
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));// 利用get(int index)方法獲得指定索引位置的對(duì)象
}
src/com/mwq/TestCollection.java完整代碼如下:
package com.mwq; import java.util.ArrayList; import java.util.LinkedList; import java.util.Iterator; import java.util.List; public class TestCollection { public static void main(String[] args) { System.out.println("開始:"); String a = "A", b = "B", c = "C", d = "D", e = "E"; List<String> list = new LinkedList<String>(); list.add(a); list.add(e); list.add(d); list.set(1, b);// 將索引位置為1的對(duì)象e修改為對(duì)象b list.add(2, c);// 將對(duì)象c添加到索引位置為2的位置 Iterator<String> it = list.iterator(); while (it.hasNext()) { System.out.println(it.next()); } // for (int i = 0; i < list.size(); i++) { // System.out.println(list.get(i));// 利用get(int index)方法獲得指定索引位置的對(duì)象 // } System.out.println("結(jié)束!"); } }
2.indexOf(Object obj)方法和lastIndexOf(Object obj)方法的區(qū)別
在使用List集合時(shí)需要注意區(qū)分indexOf(Object obj)方法和lastIndexOf(Object obj)方法,前者是獲得指定對(duì)象的最小的索引位置,而后者是獲得指定對(duì)象的最大的索引位置,前提條件是指定的對(duì)象在List集合中具有重復(fù)的對(duì)象,否則如果在List集合中有且僅有一個(gè)指定的對(duì)象,則通過這兩個(gè)方法獲得的索引位置是相同的,例如執(zhí)行下面的代碼:
src/com/mwq/TestCollection.java關(guān)鍵代碼:
public static void main(String[] args) { String a = "A", b = "B", c = "C", d = "D", repeat = "Repeat"; List<String> list = new ArrayList<String>(); list.add(a); // 索引位置為 0 list.add(repeat); // 索引位置為 1 list.add(b); // 索引位置為 2 list.add(repeat); // 索引位置為 3 list.add(c); // 索引位置為 4 list.add(repeat); // 索引位置為 5 list.add(d); // 索引位置為 6 System.out.println(list.indexOf(repeat)); System.out.println(list.lastIndexOf(repeat)); System.out.println(list.indexOf(b)); System.out.println(list.lastIndexOf(b)); } src/com/mwq/TestCollection.java完整代碼如下: package com.mwq; import java.util.ArrayList; import java.util.List; public class TestCollection { public static void main(String[] args) { System.out.println("開始:"); String a = "A", b = "B", c = "C", d = "D", repeat = "Repeat"; List<String> list = new ArrayList<String>(); list.add(a); // 索引位置為 0 list.add(repeat); // 索引位置為 1 list.add(b); // 索引位置為 2 list.add(repeat); // 索引位置為 3 list.add(c); // 索引位置為 4 list.add(repeat); // 索引位置為 5 list.add(d); // 索引位置為 6 System.out.println(list.indexOf(repeat)); System.out.println(list.lastIndexOf(repeat)); System.out.println(list.indexOf(b)); System.out.println(list.lastIndexOf(b)); System.out.println("結(jié)束!"); } }
在控制臺(tái)將輸出如下信息:
1
5
2
2
3.subList(int fromIndex, int toIndex)方法
在使用subList(int fromIndex, int toIndex)方法截取現(xiàn)有List集合中的部分對(duì)象生成新的List集合時(shí),需要注意的是,新生成的集合中包含起始索引位置代表的對(duì)象,但是不包含終止索引位置代表的對(duì)象,例如執(zhí)行下面的代碼:
src/com/mwq/TestCollection.java關(guān)鍵代碼:
public static void main(String[] args) { String a = "A", b = "B", c = "C", d = "D", e = "E"; List<String> list = new ArrayList<String>(); list.add(a); // 索引位置為 0 list.add(b); // 索引位置為 1 list.add(c); // 索引位置為 2 list.add(d); // 索引位置為 3 list.add(e); // 索引位置為 4 list = list.subList(1, 3);// 利用從索引位置 1 到 3 的對(duì)象重新生成一個(gè)List集合 for (int i = 0; i < list.size(); i++) { System.out.println(list.get(i)); } } src/com/mwq/TestCollection.java完整代碼: package com.mwq; import java.util.ArrayList; import java.util.List; public class TestCollection { public static void main(String[] args) { System.out.println("開始:"); String a = "A", b = "B", c = "C", d = "D", e = "E"; List<String> list = new ArrayList<String>(); list.add(a); // 索引位置為 0 list.add(b); // 索引位置為 1 list.add(c); // 索引位置為 2 list.add(d); // 索引位置為 3 list.add(e); // 索引位置為 4 list = list.subList(1, 3);// 利用從索引位置 1 到 3 的對(duì)象重新生成一個(gè)List集合 for (int i = 0; i < list.size(); i++) { System.out.println(list.get(i)); } System.out.println("結(jié)束!"); } }
在控制臺(tái)將輸出如下信息:
B
C
到此這篇關(guān)于java list用法示例詳解的文章就介紹到這了,更多相關(guān)java list用法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Java中List與Map初始化的一些寫法分享
- JAVA中l(wèi)ist,set,數(shù)組之間的轉(zhuǎn)換詳解
- JSON的String字符串與Java的List列表對(duì)象的相互轉(zhuǎn)換
- JAVA ArrayList詳細(xì)介紹(示例)
- JAVA LinkedList和ArrayList的使用及性能分析
- java從list中取出對(duì)象并獲得其屬性值的方法
- java8從list集合中取出某一屬性的值的集合案例
- Java List轉(zhuǎn)換成String數(shù)組幾種實(shí)現(xiàn)方式詳解
- java8實(shí)現(xiàn)list集合中按照某一個(gè)值相加求和,平均值等操作代碼
- 精通Java List 按字段提取對(duì)象
相關(guān)文章
windows上nacos自啟動(dòng)的三種方法小結(jié)
本文主要給大家介紹了windows上nacos自啟動(dòng)的三種方法,借助WinSW.exe添加到服務(wù)列表,修改nacos啟動(dòng)配置以及以開機(jī)"啟動(dòng)"方式——啟動(dòng)Nacos的startup.cmd這三種方法,文中通過圖文講解的非常詳細(xì),需要的朋友可以參考下2023-12-12MyBatis利用MyCat實(shí)現(xiàn)多租戶的簡(jiǎn)單思路分享
這篇文章主要給大家介紹了關(guān)于MyBatis利用MyCat實(shí)現(xiàn)多租戶的簡(jiǎn)單思路的相關(guān)資料,文中的多租戶是基于多數(shù)據(jù)庫進(jìn)行實(shí)現(xiàn)的,數(shù)據(jù)是通過不同數(shù)據(jù)庫進(jìn)行隔離,需要的朋友可以參考借鑒,下面來一起看看吧。2017-06-06Java中String判斷值為null或空及地址是否相等的問題
這篇文章主要介紹了Java中String判斷值為null或空及地址是否相等的問題,文中舉了簡(jiǎn)單的例子對(duì)字符串類型的值和地址問題進(jìn)行講解,需要的朋友可以參考下2016-01-01JavaEE中關(guān)于ServletConfig的小結(jié)
ServletConfig是針對(duì)特定的Servlet的參數(shù)或?qū)傩?。ServletConfig是表示單獨(dú)的Servlet的配置和參數(shù),只是適用于特定的Servlet。從一個(gè)servlet被實(shí)例化后,對(duì)任何客戶端在任何時(shí)候訪問有效,但僅對(duì)本servlet有效,一個(gè)servlet的ServletConfig對(duì)象不能被另一個(gè)servlet訪問2014-10-10Spring boot集成Go-FastDFS實(shí)現(xiàn)圖片上傳刪除等功能實(shí)現(xiàn)
這篇文章主要介紹了Spring boot集成Go-FastDFS實(shí)現(xiàn)圖片上傳刪除等功能實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-04-04Spring加載屬性文件方式(自動(dòng)加載優(yōu)先級(jí)問題)
這篇文章主要介紹了Spring加載屬性文件方式(自動(dòng)加載優(yōu)先級(jí)問題),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-02-02