JDK7集合框架原始碼學習-ArrayList(2)迭代器
-
private class Itr implements Iterator<E> {
-
int cursor; // index of next element to return
-
int lastRet = -1; // index of last element returned; -1 if no such
-
int expectedModCount = modCount;
-
-
public boolean hasNext() {
-
return cursor != size;
-
}
-
-
@SuppressWarnings("unchecked")
-
public E next() {
-
checkForComodification();
-
int i = cursor;
-
if (i >= size)
-
throw new NoSuchElementException();
-
Object[] elementData = ArrayList.this.elementData;
-
if (i >= elementData.length)
-
throw new ConcurrentModificationException();
-
cursor = i + 1;
-
return (E) elementData[lastRet = i];
-
}
-
-
public void remove() {
-
if (lastRet < 0)
-
throw new IllegalStateException();
-
checkForComodification();
-
-
try {
-
ArrayList.this.remove(lastRet);
-
cursor = lastRet;
-
lastRet = -1;
-
expectedModCount = modCount;
-
} catch (IndexOutOfBoundsException ex) {
-
throw new ConcurrentModificationException();
-
}
-
}
-
-
final void checkForComodification() {
-
if (modCount != expectedModCount)
-
throw new ConcurrentModificationException();
-
}
- }
ArrayList 內部類.
modCount轉自大飛部落格:
需要注意的地方是AbstractList中的一個屬性modCount。這個屬性主要由集合的迭代器來使用,對於List來說,可以呼叫iterator()和listIterator()等方法來生成一個迭代器,這個迭代器在生成時會將List的modCount儲存起來(迭代器實現為List的內部類),在迭代過程中會去檢查當前list的modCount是否發生了變化(和自己儲存的進行比較),如果發生變化,那麼馬上丟擲java.util.ConcurrentModificationException異常,這種行為就是fail-fast.
其實modCount 就是modifyCount.作用類似於資料庫的樂觀鎖版本列.
int cursor; 初始化值為0.感覺這塊不應該使用預設值.可讀性差些。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29254281/viewspace-2121715/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- JDK7集合框架原始碼學習-ArrayList(3)迭代器JDK框架原始碼
- JDK7集合框架原始碼學習-ArrayList(0)JDK框架原始碼
- JDK7集合框架原始碼學習-ArrayList(1)JDK框架原始碼
- JDK7集合框架原始碼學習-ArrayList(4)SubListJDK框架原始碼
- 集合框架原始碼學習之ArrayList框架原始碼
- Java集合原始碼學習(2)ArrayListJava原始碼
- JDK7集合框架原始碼學習-ArrayDequeJDK框架原始碼
- Java 集合框架------ArrayList原始碼分析Java框架原始碼
- Java 集合框架 ArrayList 原始碼剖析Java框架原始碼
- 設計模式(十七)——迭代器模式(ArrayList 集合應用原始碼分析)設計模式原始碼
- 集合框架-ArrayList集合的toString()方法原始碼解析框架原始碼
- 集合框架2- ArrayList框架
- 集合-ArrayList 原始碼解析原始碼
- 集合框架原始碼學習之LinkedList框架原始碼
- 【集合框架】JDK1.8原始碼分析之ArrayList(六)框架JDK原始碼
- 【Java集合】ArrayList原始碼分析Java原始碼
- JAVA集合:ArrayList原始碼分析Java原始碼
- Java學習之集合框架的迭代器--Iteratorjk及ListItertor介面Java框架
- 【集合框架】JDK1.8原始碼分析之HashMap & LinkedHashMap迭代器(三)框架JDK原始碼HashMap
- 集合原始碼分析[3]-ArrayList 原始碼分析原始碼
- Java集合原始碼剖析——ArrayList原始碼剖析Java原始碼
- 【Java集合原始碼剖析】ArrayList原始碼剖析Java原始碼
- Java容器原始碼學習--ArrayList原始碼分析Java原始碼
- 集合框架原始碼學習之HashMap(JDK1.8)框架原始碼HashMapJDK
- Java集合之ArrayList原始碼解析Java原始碼
- java集合原始碼分析(三):ArrayListJava原始碼
- JAVA ArrayList集合底層原始碼分析Java原始碼
- Java集合乾貨——ArrayList原始碼分析Java原始碼
- 集合------集合框架Collection/Iterator迭代器/增強for迴圈框架
- Java集合框架(一)-ArrayListJava框架
- Java 集合框架(二)—— ArrayListJava框架
- Java 集合(2)之 Iterator 迭代器Java
- 【Java集合】2 ArrayListJava
- java集合學習(一):詳解ArrayListJava
- 死磕 java集合之ArrayList原始碼分析Java原始碼
- Java集合-ArrayList原始碼解析-JDK1.8Java原始碼JDK
- Java集合乾貨1——ArrayList原始碼分析Java原始碼
- 純手寫Arraylist集合框架框架