写在前面:
我也是一名java语言的爱好者,仅以此文作为学习的记录,对于文中出现的代码规范,代码格式,算法效率等问题,希望各路大神不吝赐教,在下感激不尽。同是学习的同学也同样希望互相交流,取长补短。
以下内容是学习《java编程思想》(《Thinking in Java》)的笔记,包括对习题的实现。
上一篇文章说到java中的迭代器Iterator只能单向移动。而ListIterator可以双向移动,不过它只能用于各种List的访问。即可以产生相对于当前位置前一个和后一个元素的索引。并且可以使用set()方法替换它访问过的最后一个元素,可以调用listIterator(n)创建一个开始就指向索引为n的元素处的ListIterator。
1.看下面一段代码:
List list = new ArrayList(Arrays.asList(0,1,2,3,4,5,6,7));
ListIterator listIterator = list.listIterator();
System.out.println("the next one is "+listIterator.nextIndex());
System.out.println("the previous one is "+listIterator.previousIndex());
可以看到在迭代器为列表原点时,nextIndex为0,而previousIndex为-1(当然不建议这么去做,因为索引为-1的元素事实上已经越界了。),这说明next方法指向当前位置的元素,而previous方法指向当前位置前一个的元素。
2.set方法的使用。
用指定元素替换 next 或 previous 返回的最后一个元素(可选操作)。只有在最后一次调用 next 或 previous 后既没有调用 ListIterator.remove 也没有调用 ListIterator.add 时才可以进行该调用。
List list = new ArrayList(Arrays.asList(0,1,2,3,4,5,6,7));
ListIterator listIterator = list.listIterator();
listIterator.next();
listIterator.set(new Integer(99));
System.out.println(list);
这样就把next方法返回的0给替换掉了。
3.练习:创建并组装一个List
List list = new ArrayList(Arrays.asList(0,1,2,3,4,5,6,7));
List list2 = new ArrayList(8);
ListIterator listIterator = list.listIterator(8);
while(listIterator.hasPrevious()){
list2.add(listIterator.previous());
}
System.out.println(list2);