集合框架-List集合-2
(4)列表迭代器的特有功能:(瞭解)
可以逆向遍歷,但是要先正向遍歷,所以無意義,基本不使用。
package cn.itcast_04;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
/*
* 列表迭代器:
* ListIterator listIterator():List集合特有的迭代器,不是通用的,開發大部分不用它
* 該迭代器繼承了Iterator迭代器,所以,就可以直接使用hasNext()和next()方法。
*
* 特有功能:
* Object previous():獲取上一個元素
* boolean hasPrevious():判斷是否有元素
*
* 注意:ListIterator可以實現逆向遍歷,但是必須先正向遍歷,才能逆向遍歷,所以一般無意義,不使用。
*/
public class ListIteratorDemo {
public static void main(String[] args) {
// 建立List集合物件
List list = new ArrayList();
list.add("hello");
list.add("world");
list.add("java");
// ListIterator listIterator()
ListIterator lit = list.listIterator(); // 子類物件
while (lit.hasNext()) {
String s = (String) lit.next();
System.out.println(s);
}
// System.out.println("-----------------");
while (lit.hasPrevious()) {
String s = (String) lit.previous();
System.out.println(s);
}
System.out.println("-----------------");
// 迭代器
Iterator it = list.iterator();
while (it.hasNext()) {
String s = (String) it.next();
System.out.println(s);
}
System.out.println("-----------------");
}
}
(5)併發修改異常
A:出現的現象
迭代器遍歷集合,集合修改集合元素
B:原因
迭代器是依賴於集合的,而集合的改變迭代器並不知道。
C:解決方案
a:迭代器遍歷,迭代器修改(ListIterator)
元素新增在剛才迭代的位置
b:集合遍歷,集合修改(size()和get())
元素新增在集合的末尾
package cn.itcast_04;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
/*
* 問題?
* 我有一個集合,如下,請問,我想判斷裡面有沒有"world"這個元素,如果有,我就新增一個"javaee"元素,請寫程式碼實現。
*
* ConcurrentModificationException:併發修改異常
當方法檢測到物件的併發修改,但不允許這種修改時,丟擲此異常。
* 產生的原因:
* 迭代器是依賴於集合而存在的,在判斷成功後,集合的中新新增了元素,而迭代器卻不知道,所以就報錯了,這個錯叫併發修改異常。
* 其實這個問題描述的是:迭代器遍歷元素的時候,通過集合是不能修改元素的。
* 如何解決呢?
* A:迭代器迭代元素,迭代器修改元素
* 元素是跟在剛才迭代的元素後面的。
* B:集合遍歷元素,集合修改元素(普通for)
* 元素在最後新增的。
*/
public class ListIteratorDemo2 {
public static void main(String[] args) {
// 建立List集合物件
List list = new ArrayList();
// 新增元素
list.add("hello");
list.add("world");
list.add("java");
// 迭代器遍歷
Iterator it = list.iterator();
while (it.hasNext()) {
String s = (String) it.next();
if ("world".equals(s)) {
list.add("javaee"); //ConcurrentModificationException:併發修改異常,迭代器遍歷元素的時候,通過集合是不能修改元素的
}
}
// 方式1:迭代器迭代元素,迭代器修改元素
// 而Iterator迭代器卻沒有新增功能,所以我們使用其子介面ListIterator
ListIterator lit = list.listIterator();
while (lit.hasNext()) {
String s = (String) lit.next();
if ("world".equals(s)) {
lit.add("javaee");
}
}
// 方式2:集合遍歷元素,集合修改元素(普通for)
for (int x = 0; x < list.size(); x++) {
String s = (String) list.get(x);
if ("world".equals(s)) {
list.add("javaee");
}
}
System.out.println("list:" + list);
}
}
相關文章
- Collection集合、List集合及其方法
- java集合-ListJava
- 集合框架2- ArrayList框架
- 集合框架(List儲存字串並遍歷)框架字串
- List型別集合型別
- list 集合去重
- List集合轉JSONObjectJSONObject
- Java集合中的框架2Java框架
- J2SE-刪除List集合元素
- 集合框架框架
- Java程式設計基礎17——集合(List集合)Java程式設計
- List集合(ArrayList-LinkedList);Set集合(HashSet-TreeSet)
- 3、List集合——ArrayList、LinkedList
- Java集合List隨堂Java
- java list 集合去重Java
- 【java】【集合】List、ListIterator、VectorJava
- Java中List集合轉Map集合報錯:Duplicate keyJava
- java集合框架Java框架
- Java 集合框架Java框架
- Java集合原始碼探究~ListJava原始碼
- Java 的 Collection 與 List 集合Java
- 小白學集合之List介面
- 【Java集合原始碼剖析】Java集合框架Java原始碼框架
- 【JAVA集合】JAVA集合框架及其常用方法Java框架
- 10.集合框架框架
- Java集合(5)之 List 總結Java
- Java中List集合效能比較Java
- 集合第一個Array List理解
- Java List 常用集合 ArrayList、LinkedList、VectorJava
- 陣列轉換成List集合陣列
- L2-005 集合相似度【集合】
- Java集合中List,Set以及Map等集合體系詳解(史上最全)Java
- 對Java list集合的新認知Java
- Java -- 對List集合進行分頁Java
- mybatis自定義List集合解析器MyBatis
- 集合------集合框架Collection/Iterator迭代器/增強for迴圈框架
- 集合框架體系概述框架
- 集合框架能否存null框架Null
- Java基礎-集合框架Java框架