public class ListTerator {
public static void main(String[] args) {
List<Integer> integers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8);
ListIterator<Integer> test = integers.listIterator();
/* ListIterator<Integer> test2 = integers.listIterator();
test2=integers.listIterator(8);*/
test= integers.listIterator(8);
while(test.hasPrevious()){
System.out.print(test.previous()+"\t");
}
System.out.println("**************************");
while(test.hasNext()){
System.out.print(test.next()+"\t");
}
Character
// ArrayList<String> arr = new ArrayList<String>();
/* arr.add("aaa");
arr.add("bbb");
arr.add("ccc");
arr.add("ddd");*/
/* ArrayList<Character> list = new ArrayList<>();
for (char c = 'A'; c <= 'G'; c++) {
list.add(c);
}
Iterator<Character> it = list.iterator();
while (it.hasNext()) {
char c = it.next(); // next() 返回下一个元素
if (c == 'C') {
it.remove(); // remove() 移除元素
} else {
System.out.print(c + ", ");
}
*/
ArrayList<Character> arr = new ArrayList<>();
for(char i='a';i<='m';i++){
arr.add(i);
}
System.out.println("**************************");
System.out.println("之前 : " + arr);
ListIterator<Character> lis = arr.listIterator();
//ListIterator<E> listIterator();
// ListIterator<E> listIterator(int index);
while (lis.hasNext()) {
System.out.println(lis.next() + ", " + lis.previousIndex() + ", " + lis.nextIndex());
}
while (lis.hasPrevious()) {
System.out.print(lis.previous() + " ");
}
System.out.println("///");
lis = arr.listIterator(3);//调用listIterator(n)方法创建一个一开始就指向列表索引为n的元素处的ListIterator。
/*
public ListIterator<E> listIterator(int index) {
if (index < 0 || index > size)
throw new IndexOutOfBoundsException("Index: "+index);
return new ListItr(index);
}*/
/*
* 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];
}
*
*/
while (lis.hasNext()) {
Character t = lis.next();
System.out.println(t);
if ("".equals(t)) {
/*lis.set("nnn");*/
lis.set('p');
} else {
/* lis.add("kkk");*/
lis.add('s');
}
}
System.out.println("之后 : " + arr);
}
}
8 7 6 5 4 3 2 1 **************************
1 2 3 4 5 6 7 8 9 **************************
之前 : [a, b, c, d, e, f, g, h, i, j, k, l, m]
a, 0, 1
b, 1, 2
c, 2, 3
d, 3, 4
e, 4, 5
f, 5, 6
g, 6, 7
h, 7, 8
i, 8, 9
j, 9, 10
k, 10, 11
l, 11, 12
m, 12, 13
m l k j i h g f e d c b a ///
d
e
f
g
h
i
j
k
l
m
之后 : [a, b, c, d, s, e, s, f, s, g, s, h, s, i, s, j, s, k, s, l, s, m, s]
解决了Iterator存在的问题
-
ListIterator有
add()
方法,可以向List中添加对象,而Iterator不能 -
ListIterator和Iterator都有
hasNext()
和next()
方法,可以实现顺序向后遍历,但是ListIterator有hasPrevious()
和previous()
方法,可以实现逆向(顺序向前)遍历。Iterator就不可以。 -
ListIterator可以定位当前的索引位置,
nextIndex()
和previousIndex()
可以实现。Iterator没有此功能。 -
ListIterator 可以再迭代时对集合进行
add
、set
、remove
操作,而Iterator
迭代器只能在迭代时对集合进行 remove 操作