- 面向迭代器编程,能将遍历集合的操作与集合类型分离,统一了对集合的访问方式,Iterator只能单向移动
@Test
@Description(description = "迭代器分离遍历操作和集合类型")
public void test4() throws Exception {
List<Integer> list = Arrays.asList(1, 2, 3);
HashSet<Integer> set = new HashSet<Integer>(list);
print(list.iterator());
System.out.println("===========");
print(set.iterator());
}
private void print(Iterator<Integer> iterator) {
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
}
}
- ListIterator迭代器,list特有的迭代器
-
- 双向移动。
- 不指向任何list元素,它的光标位置位于list元素之间和首尾。长度为n的列表,ListIterator可移动的光标个数为n+1
-
- set和remove方法,修改和删除next()或previous()访问过的最后一个元素。
- list.listIterator(n)创建一个一开始就指向列表索引为n的元素处的ListIterator,迭代更灵活。可在指定位置开始迭代、插入元素等操作。
@Test(description = "测试listIterator支持双向移动")
public void test1() throws Exception {
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
ListIterator<Integer> iterator = list.listIterator();
while (iterator.hasNext())
System.out.print(iterator.next() + "\t");
System.out.println();
while (iterator.hasPrevious())
System.out.print(iterator.previous() + "\t");
}
@Test(description = "在列表指定位置插入元素,这里把另外一个列表的元素插入到当前索引处")
public void test2() throws Exception {
List<Integer> integers = Arrays.asList(1, 2, 3, 4, 5);
List<Integer> list = new ArrayList<Integer>(integers);
ListIterator<Integer> iterator = list.listIterator(list.indexOf(3));
System.out.println(list);
for (Integer integer : integers) {
iterator.add(integer);
}
System.out.println(list);
}
@Test(description = "通过listIterator实现元素倒置")
public void test3() throws Exception {
List<Integer> integers = Arrays.asList(1, 2, 3, 4, 5);
List<Integer> list = new ArrayList<Integer>(integers);
// 创建一个指向列表末尾的listIterator
ListIterator<Integer> listIterator = list.listIterator(list.size());
List<Integer> newList = new ArrayList<Integer>();
// 向后迭代并添加元素到新的列表中
while (listIterator.hasPrevious()) {
newList.add(listIterator.previous());
}
System.out.println(newList);
Collections.reverse(list);
System.out.println(list);
Assert.assertEquals(newList,list);
}
@Test(description = "测试ListIterator的set和remove方法")
public void test4() throws Exception {
List<Integer> integers = Arrays.asList(1, 2, 3, 4, 5);
List<Integer> list = new ArrayList<Integer>(integers);
ListIterator<Integer> iterator = list.listIterator(list.indexOf(3));
while (iterator.hasNext()) {
iterator.next();
iterator.set(0);
}
System.out.println(list);
while (iterator.hasPrevious()) {
iterator.previous();
iterator.remove();
}
System.out.println(list);
}