Java List 用法詳解及實(shí)例分析
Java List 用法詳解及實(shí)例分析
Java中可變數(shù)組的原理就是不斷的創(chuàng)建新的數(shù)組,將原數(shù)組加到新的數(shù)組中,下文對(duì)Java List用法做了詳解。
- List:元素是有序的(怎么存的就怎么取出來(lái),順序不會(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)是查詢(xún)很快,但增刪較慢)線程不同步
- LinkedList:底層的數(shù)據(jù)結(jié)構(gòu)是鏈表結(jié)構(gòu)(特點(diǎn)是查詢(xún)較慢,增刪較快)
- Vector:底層是數(shù)組數(shù)據(jù)結(jié)構(gòu) 線程同步(數(shù)組長(zhǎng)度是可變的百分之百延長(zhǎng))(無(wú)論查詢(xún)還是增刪都很慢,被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í),是不可以通過(guò)集合對(duì)象的方法操作集合中的元素因?yàn)闀?huì)發(fā)生ConcurrentModificationException異常(并發(fā)異常)所以,在迭代器時(shí),只能用迭代器的方法造作元素因?yàn)镮terator方法是有限的所以只能對(duì)元素進(jìn)行判斷,取出,刪除的操作如果想要其他的操作如添加,修改等,就需要使用其子接口,ListIterator 該接口只能通過(guò)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); /*在迭代過(guò)程中準(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();
獲取元素但不刪除元素。如果集合中沒(méi)有元素,會(huì)出現(xiàn)NoSuchElementException
removeFirst(); removeLast();
獲取元素但是刪除元素。如果集合中沒(méi)有元素,會(huì)出現(xiàn)NoSuchElementException
在JDK1.6出現(xiàn)了替代方法
offerFirst(); offerLast();
peekFirst(); peekLast(); 獲取元素,但是元素不被刪除。如果集合中沒(méi)有元素,會(huì)返回null
pollFirst(); pollLast(); 獲取元素,但是元素被刪除。如果集合中沒(méi)有元素,會(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())); } } }
以上就是對(duì)java list用法的實(shí)例詳解,本站關(guān)于java 的開(kāi)發(fā)文章還有很多,希望大家搜索參考,感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!
相關(guān)文章
Java完全二叉樹(shù)的創(chuàng)建與四種遍歷方法分析
這篇文章主要介紹了Java完全二叉樹(shù)的創(chuàng)建與四種遍歷方法,結(jié)合實(shí)例形式分析了完全二叉樹(shù)的概念、定義及遍歷操作相關(guān)實(shí)現(xiàn)技巧,并對(duì)比分析了滿二叉樹(shù)與完全二叉樹(shù)的區(qū)別,需要的朋友可以參考下2017-11-11Mybatis批量插入大量數(shù)據(jù)的最優(yōu)方式總結(jié)
批量插入功能是我們?nèi)粘9ぷ髦斜容^常見(jiàn)的業(yè)務(wù)功能之一,下面這篇文章主要給大家總結(jié)介紹了關(guān)于Mybatis批量插入大量數(shù)據(jù)的幾種最優(yōu)方式,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-03-03SpringCloud之Admin服務(wù)監(jiān)控實(shí)現(xiàn)流程示例詳解
這篇文章主要為大家介紹了SpringCloud之Admin服務(wù)監(jiān)控流程示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-09-09intellij idea中安裝、配置mybatis插件Free Mybatis plugin的教程詳解
這篇文章主要介紹了intellij idea中安裝、配置mybatis插件Free Mybatis plugin的教程,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-09-09Java 仿天貓服裝商城系統(tǒng)的實(shí)現(xiàn)流程
讀萬(wàn)卷書(shū)不如行萬(wàn)里路,只學(xué)書(shū)上的理論是遠(yuǎn)遠(yuǎn)不夠的,只有在實(shí)戰(zhàn)中才能獲得能力的提升,本篇文章手把手帶你用java+SSM+jsp+mysql+maven實(shí)現(xiàn)一個(gè)仿天貓服裝商城系統(tǒng),大家可以在過(guò)程中查缺補(bǔ)漏,提升水平2021-11-11