javable 之Iterable

如果希望我们自己设计的ADT支持可迭代,即可以使用
for(X x :xxxx)
Iterator ITER =xxxx.iterator();
while(iter.hasNext()) {…};

的方式来遍历进行一些列操作即Iterable,则可以使用Iterable 和Iterator

这样做的好处是可以进行迭代而不需要知道ADT里面具体是如何实现的,是使用的什么样的数据结构这些都无所谓。

Iterable接口:实现该接口的集合对象是可迭代遍历的

1 public interface Iterable{
2 …
3 Iterator iterator();
4 }
  
Iterator 迭代器,是一个接口 
1 public interface Iterator{
2
3 boolean hasNext();
4 E next();
5 void remove();
6
7}
  
下面给出一个具体的例子:

1 public static void main(String[] args) {
2
3 petHospital h = new petHospital();
4 Dog dog1 = new Dog(1,“Mary”);
5 Dog dog2 = new Dog(3,“Elizabeth”);
6 Dog dog3 = new Dog(2,“Anne Boleyn”);
7 h.add(dog1);
8 h.add(dog2);
9 h.add(dog3);
10 for(Dog d :h)
11 {
12 System.out.println(d);
13 }
14 }
15
16 }
17
18
19 class Dog implements Comparable {
20 int age;
21 String name ;
22 public Dog (int age,String name)
23 {
24 this.age=age;
25 this.name=name;
26 }
27
28 @Override
29 public int compareTo(Dog o) {
30 // TODO Auto-generated method stub
31 return (this.age>o.age)? 1:-1;
32 }
33 @Override
34 public String toString() {
35 // TODO Auto-generated method stub
36 return name+" "+age;
37 }
38 }
39 class petHospital implements Iterable
40 {
41 List dogs =new ArrayList() ;
42 public void add(Dog d)
43 {
44 dogs.add(d);
45 }
46 @Override
47 public Iterator iterator() {
48 // TODO Auto-generated method stub
49 return new petHospitalIterator();
50 }
51 private class petHospitalIterator implements Iterator {
52 // 当前迭代元素的下标
53 private int index = 0;
54
55 // 判断是否还有下一个元素,如果迭代到最后一个元素就返回56 false
57 public boolean hasNext() {
58 return index != dogs.size();
59 }
60
61 @Override
62 public Dog next() {
63 return dogs.get(index++);
64 }
65
66 // 这里不支持,抛出不支持操作异常
67 public void remove() {
68 throw new UnsupportedOperationException();
69 }
70 }

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值