源码分析:
public interface List<E>{
Iterator<E> iterator();
ListIterator<E> listIterator();
boolean add(E e);
}
public abstract class AbstractList<E>{
int modCount = 0;
}
//ArrayList继承了一个类实现了一个接口
public class ArrayList<E> extends AbstractList<E> implements List<E>{
public boolean add(E e) {
ensureCapacityInternal(size + 1); // Increments modCount!!
elementData[size++] = e;
return true;
}
public Iterator<E> iterator() {
return new Itr();
}
private class Itr implements Iterator<E> {
}
}
public ListIterator<E> listIterator() {
return new ListItr(0);
}
private class ListItr extends Itr implements ListIterator<E> {
ListItr(int index) {
super();
cursor = index;
}
public boolean hasPrevious() {
return cursor != 0;
}
public int nextIndex() {
return cursor;
}
public int previousIndex() {
return cursor - 1;
}
@SuppressWarnings("unchecked")
public E previous() {
checkForComodification();
int i = cursor - 1;
if (i < 0)
throw new NoSuchElementException();
Object[] elementData = ArrayList.this.elementData;
if (i >= elementData.length)
throw new ConcurrentModificationException();
cursor = i;
return (E) elementData[lastRet = i];
}
public void set(E e) {
if (lastRet < 0)
throw new IllegalStateException();
checkForComodification();
try {
ArrayList.this.set(lastRet, e);
} catch (IndexOutOfBoundsException ex) {
throw new ConcurrentModificationException();
}
}
public void add(E e) {
checkForComodification();
try {
int i = cursor;
ArrayList.this.add(i, e);
cursor = i + 1;
lastRet = -1;
expectedModCount = modCount; //把实际的修改值赋值给预期的修改值
} catch (IndexOutOfBoundsException ex) {
throw new ConcurrentModificationException();
}
}
}
实现一下:
package com.it04;
import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;
public class ListDemo {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("hello");
list.add("world");
list.add("java");
//通过list集合的listIterator()方法得到
//列表迭代器
ListIterator<String> lit = list.listIterator();
//正向遍历
while (lit.hasNext()){
String s = lit.next();
System.out.println(s);
}
System.out.println("====================");
//反向遍历
while (lit.hasPrevious()){
String s = lit.previous();
System.out.println(s);
}
//获取列表迭代器方法遍历
// ListIterator<String> lit = list.listIterator();
while (lit.hasNext()){
String s = lit.next();
if (s.equals("world")){
//用的是ListIterator 的list来用添加方法*****
lit.add("憨憨");
}
}
System.out.println(list);
}
}
//用的是ListIterator 的list来用添加方法*****