过程:
-类MultiIterableClass继承类IterableClass
reversed方法
randomized方法(运用到Collections.shuffle)
main:三种方法输出
个人实现:
package thinking;
import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.Random;
import thinkingjava.IterableClass;
public class MultiIterableClass extends IterableClass {
public Iterator<String> reversed(){
return new Iterator<String>() {
private int index = words.length-1;
@Override
public boolean hasNext() {
// TODO Auto-generated method stub
return index<0;
}
@Override
public String next() {
// TODO Auto-generated method stub
return words[index--];
}
public void remove(){
throw new UnsupportedOperationException();
}
};
}
//未写出
public Iterator<String> randomized(){
return new Iterator<String>() {
public Iterator<String> iterator() {
List<String> shuffled = new ArrayList<>(Arrays.asList(words));
Collections.shuffle(shuffled, new Random(47));
return shuffled.iterator();
}
@Override
public boolean hasNext() {
// TODO Auto-generated method stub
return false;
}
@Override
public String next() {
// TODO Auto-generated method stub
return null;
}
};
}
//未写出,报错
public static void main(String[] args) {
// TODO Auto-generated method stub
/*for(String s : new MultiIterableClass().reversed()){
System.out.print(s+" ");
}*/
MultiIterableClass multiIterableClass = new MultiIterableClass();
for(String s : multiIterableClass.iterator()){
System.out.print(s+" ");
}
for(String s : new MultiIterableClass().randomized()){
System.out.print(s+" ");
}
}
}
原书实现:
package thinkingjava;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.Random;
public class MultiIterableClass extends IterableClass {
public Iterable<String> reversed(){
return new Iterable<String>() {
@Override
public Iterator<String> iterator() {
// TODO Auto-generated method stub
return new Iterator<String>() {
private int index = words.length-1;
public boolean hasNext() {
// TODO Auto-generated method stub
return index>-1;
}
public String next() {
// TODO Auto-generated method stub
return words[index--];
}
public void remove(){
throw new UnsupportedOperationException();
}
};
}
};
}
public Iterable<String> randomized(){
return new Iterable<String>() {
public Iterator<String> iterator() {
List<String> shuffled = new ArrayList<>(Arrays.asList(words));
Collections.shuffle(shuffled, new Random(47));
return shuffled.iterator();
}
};
}
public static void main(String[] args) {
MultiIterableClass multiIterableClass = new MultiIterableClass();
for(String s : multiIterableClass.reversed()){
System.out.print(s+" ");
}
System.out.println();
for(String s : multiIterableClass.randomized()){
System.out.print(s+" ");
}
System.out.println();
for(String s : multiIterableClass){
System.out.print(s+" ");
}
}
}
比较:
对Iterable与Iterator分辨不清,导致实现失败