java - 集合框架(一)区分 Iterator 接口 和 Iterable接口

java学习之路记录
参考书籍 java核心卷一
集合框架总结
只是关于结构 和迭代器的总结


集合框架类库里的结构
在java提供的类库里,关于集合的其实分三种类型,
1 各种接口,例如Collection等。定义接口目的是将接口与实现分离。比如队列的实现可以用两种方式,循环数组,链表。

public class CircularArrayQueue<E> implements  Queue<e>{..}

public class  LinkedListQueue<E> implements  Queue<e>{..}
//两种实现都可以继承接口Queue

2 各种抽象类,例如 AbstractQueue等,这些集合的抽象类是为了类库的实现者而设计的。什么意思呢?就是如果你想要自己去实现队列类,会发现扩展AbstractQueue类 比Queue接口容易的多。

3 各种具体类,这些类已经实现了很多方法,我们可以参考api直接调用。
具体的继承关系请参考核心卷一 9.1


迭代器
区分 Iterator 接口 和 Iterable接口
现在先说下Iterator接口
很多集合类都含有iterator()方法,调用这个方法就会返回一个实现了Iterator()接口的对象,利用这个对象就可以对集合进行遍历了。

public interface Iterator<E>{
    E next();
    boolean hasNext();
    void remove();
    ..
    }

需要注意的是:remove() 跟 next()方法的调用是相互依赖的,什么意思?
remove()方法每次删除的元素是上次调用next()方法返回的元素。
例子:

//删除两个相邻的元素
it.remove();
it.remove(); //错误
相反的,必须要先调用next()返回要删除的元素
it.remove();
it.next();
it.remove();//OK

接着说一下Iterable接口

public interface Iterable<E>{
    Iterator<E> iterator();// 抽象方法。
}

因为这个接口含有iterator()方法,这个方法可以返回一个实现了Iterator()接口的对象。这个对象可以用for each 进行循环遍历。
所有只要实现了Iterable<E>接口的对象就可以用for each。
重点是 collectin接口实现了Iterable<E>接口。因此,标准库中的任何集合都可以使用for each。


下篇内容是 常见集合类的具体介绍 见集合框架(二)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值