迭代器

  • 面向迭代器编程,能将遍历集合的操作与集合类型分离,统一了对集合的访问方式,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);
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值