Iterable和iterator java
Iterable定義了一個接口,表示該對象是能夠用來遍歷的,而實現該接口的類要返回一個iterator,來具體的實現遍歷. ide
實現了Iterable接口的類能夠和foreach配合使用.若是沒有應用泛型的話,iterator返回的是object,須要類型轉化. code
應用 對象
1.爲咱們本身的class建立多個iterator 接口
public class GameCollection { private Vector<Game> games; private Vector<GameConsole> consoles; private class Games implements Iterable<Game> { @Override public Iterator<Game> iterator() { return games.iterator(); } } private class Consoles implements Iterable<GameConsole> { @Override public Iterator<GameConsole> iterator() { return consoles.iterator(); } } public GameCollection() { games = new Vector<Game>(); consoles = new Vector<GameConsole>(); } public void add(Game game) { games.add(game); } public void add(GameConsole console) { consoles.add(console); } public Games games() { return new Games(); } public Consoles consoles() { return new Consoles(); } }
GameCollection gc = new GameCollection(); //Add games and consoles with gc.add() for (Game g : gc.games()) { System.out.println(g.getName()); } for (GameConsole g : gc.consoles()) { System.out.println(g.getName()); }
2.建立本身的iterator element
public class CircularGamesIterator implements Iterator<Game> { private Vector<Game> list; private int currentPosition; public CircularGamesIterator(Vector<Game> games) { list = games; currentPosition = 0; } @Override public boolean hasNext() { return currentPosition < list.size(); } @Override public Game next() { Game el = list.elementAt(currentPosition); currentPosition = (currentPosition + 1) % list.size(); return el; } @Override public void remove() { } }
public class GameCollection implements Iterable<Game> { private Vector<Game> games; public GameCollection() { games = new Vector<Game>(); } public void add(Game game) { games.add(game); } @Override public Iterator<Game> iterator() { return new CircularGamesIterator(games); } }