Java数据结构和算法-链表(5-迭代器)

在链表中可以通过find()方法来查找到某一个特定的值,也可以通过delete方法删除某一个特定的值。这些操作都有一个搜索的工作,以找到特定的链接点。
在链表中进行一次某个值的查找删除或插入是简单的。但是现实中,经常会进行的是对某些特定的链接点的操作,而这些操作也都要进行搜索的工作。例如:要查找出所有某班成绩低于平均成绩的同学,要改变公司所有拥有最低工资的员工工资。这些都要进行搜索。
但是链表不是数组,链表没有下标,如果是数组的话,可以通过跟踪下标来确定当前搜索到的位置,当查找到第一个符合条件的值的同时,返回当前的下标,从而使得在继续查找下一个符合条件的值时,可以从该下标开始。链表不可以,链表在返回了符合条件的值后,必须从头开始查找下一个符合条件的值。如果有一个保存当前链接点的引用,在下一次查找时,从该引用的链接点进行步进,这样效率就会提高很多。
可能有人在说到“保存当前链接点的引用”时,就想到了在之前链表的介绍中,在链表类中定义的current,用current来存取一个链接点,然后使current递增,来移动到下一个链接点。
这种方法存在的一个问题是,只能进行一种引用。但是在现实中可能不止一个,就像经常要使用多个下标。并且需要引用的数目是未知的,所以这个引用不应该定义在链表内,而应该封装在一个独立的类中,并且这个类不能和链表相同。

迭代器

迭代器类是封装了对数据结构的数据项的引用的类,并用来遍历这些对象。在介绍的初始定义如下:

class ListIterator() {
    private Link current;

    //...
}

它包含了一个对链接点的引用。
在产生链表后,可以通过调用某些方法来创建迭代器,比如下面的操作:

public static void main(String[] args) {

    LinkList linkList = new LinkList();
    ListIterator iter1 = linkList.getIterator();
    Link link = iter1.getCurrent();
    iter1.nextLink();
}

在上面的代码中通过getIterator()来获取链表的迭代器,创建这个迭代器之后,可以通过它的递增,来指向下一个链接点。当然迭代器可以不止一个,迭代器总是指向链表中的一些链接点,它通过引用与链表相关联,但不等同于它就是链表或者链接点,如下图:
这里写图片描述

迭代器的其他特性

在链表章节的其他程序中,都会定义一个previous的字段,这使得链表进行删除或者插入

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值