Introduction

  • 在集合数据类型中实现可迭代,需要引入Iterator接口(可迭代的接口)。
    import java.util.Iterator

  • 在类声明中添加implements Iterable<Item>(表面该类将会提供一个iterator()方法)

  • 该方法会返回一个Iterator对象,保证该类会实现方法hasNext(), next(), remove() <- 循环链表的方法

1
2
public Iterator<Item> iterator() {
return new ListIterator();
1
2
3
4
5
6
7
8
9
10
11
12
private class ListIterator implements Iterator<Item> {
private Node current = first;
public boolean hasNext()
{
return current != null;
}
public void remove() {}
public Item next() {
Item item = current.item;
current = current.next;
return item;
}
  • Bag, Queue, Stack,如果想要把这些集合的数据类型实现可迭代,要添加以上代码。

Test

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
import java.util.Iterator;//引用Iterator接口

public class Bag <Item> implements Iterable<Item>{//保证该类提供iterator方法

private Node first;
private class Node
{
Item item;
Node next;
}

public void add(Item item)
{
Node oldfriend = first;
first = new Node();
first.item = item;
first.next = oldfriend;
}

//保证该类会实现方法hasNext(), next(), remove() <- 循环链表的方法
public Iterator<Item> iterator() {//iterator()方法返回一个Iterator对象
return new ListIterator();
}
private class ListIterator implements Iterator<Item> {
private Node current = first;
public boolean hasNext()
{
return current != null;
}
public void remove() {}
public Item next() {
Item item = current.item;
current = current.next;
return item;

}
}
}