迭代器Iterator
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
class Cat {
private
int
id;
public
int getId() {
return
id;
}
public
void setId(int
id) {
this.id
= id;
}
Cat(int i) {
id = i;
}
}
public
class Cats {
public
static
void main(String[] args) {
List<Cat> cats =
new ArrayList<Cat>();
for (int
i = 0; i < 7; i++)
cats.add(new Cat(i));
System.out.println("before
remove:"+cats.size());
Iterator e = cats.iterator();
while (e.hasNext()) {
//e.remove();//java.lang.IllegalStateException
System.out.println("Cat
id:" + ((Cat) e.next()).getId());
e.remove();
}
System.out.println("after
remove:"+cats.size());
}
}
|
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.ListIterator;
public
class ListIteration {
public
static
void main(String[] args) {
List<String> stringList =
new ArrayList<String>(Arrays.asList("a",
"b",
"c",
"d",
"e"));
ListIterator<String> it = stringList.listIterator();
while (it.hasNext())
System.out.print(it.next()
+ "," + it.nextIndex() +
","
+ it.previousIndex() +
";");
System.out.println();
//回溯
while(it.hasPrevious())
System.out.print(it.previous()+"
");
System.out.println();
System.out.println(stringList);
it=stringList.listIterator(2);
while(it.hasNext()){
it.next();
it.set("z");
}
System.out.println(stringList);
}
}
|
import java.util.Iterator;
public
class IterableClass
implements Iterable<String> {
protected String[]
words = ("And that is how "
+
"we know the Earth to be banana-shaped.").split(" ");
public Iterator<String> iterator() {
return
new Iterator<String>() {
private
int
index = 0;
public
boolean hasNext() {
return
index <
words.length;
}
public String next() {
return
words[index++];
}
public
void remove() {}
};
}
public
static
void main(String[] args){
for(String s:new
IterableClass())
System.out.print(s+",");
}
}
|
Iterator<T> iterator();
|
boolean hasNext();
E next();
void remove();
|
import java.util.Arrays;
public
class ArrayIsNotIterable {
static<T>
void test(Iterable<T> ib){
for(T t:ib)
System.out.print(t+"
");
}
public
static
void main(String[] args){
test(Arrays.asList(1,2,3));
String[] strs={"A","B","C"};
//test(strs);ERROR
test(Arrays.asList(strs));
}
}
|
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Iterator;
@SuppressWarnings("serial")
class ReversibleArrayList<T>
extends ArrayList<T> {
public ReversibleArrayList(Collection<T> c) {
super(c);
}
public Iterable<T> reversed() {
return
new Iterable<T>() {
public Iterator<T> iterator() {
return
new Iterator<T>() {
int
current = size() - 1;
public
boolean hasNext() {
return
current > -1;
}
public T next() {
return get(current--);
}
public
void remove() {
}
};
}
};
}
}
public
class AdapterMethodIdiom {
public
static
void main(String[] args) {
ReversibleArrayList<String> ral =
new ReversibleArrayList<String>(
Arrays.asList("To be or not to be".split("
")));
for (String s : ral)
System.out.print(s
+ " ");
System.out.println();
for (String s : ral.reversed())
System.out.print(s
+ " ");
}
}
|
ReversibleArrayList<String> ral =
new ReversibleArrayList<String>(…);
for (String s : ral)
//此處的ral其實是Iterable接口的引用,因爲ReversibleArrayList類是實現Iterable接口的。
|