List迭代器与foreach的使用
foreach , 其实质是调用的collection的迭代器接口 , 所有 , 如果需要自定义容器的遍历规则 , 需要继承迭代器并重写迭代器接口package sky.java.interable;import java.util.Iterator;/*** 模拟容器子类,实现迭代器接口,使用foreach遍历*/public class MyIterableClass i...
·
- foreach , 其实质是调用的collection的迭代器接口 , 所有 , 如果需要自定义容器的遍历规则 , 需要继承迭代器并重写迭代器接口
package sky.java.interable;
import java.util.Iterator;
/**
* 模拟容器子类,实现迭代器接口,使用foreach遍历
*/
public class MyIterableClass implements Iterable<String>{
private String[] arr = "321 534 23423 321".split(" ");
@Override
public Iterator<String> iterator() {
return new Iterator<String>() {
private int size = 0;
@Override
public void remove() {
}
@Override
public boolean hasNext() {
return size < arr.length;
}
@Override
public String next() {
return arr[size++];
}
};
}
/**
* 收获
* 1. foreach循环底层依赖的是 集合类的迭代器.
* 2. 如果想让某各类能够使用foreach循环 , 让该类实现Iterable接口,重写方法即可.
* 3. 数组是不可以的.
*/
public static void main(String[] args) {
MyIterableClass myIterableClass = new MyIterableClass();
for (String s : myIterableClass) {
System.out.println(s);
}
}
}
- 自定义List的适配器, 对list进行包装. 使其按照其他规则遍历
package sky.java.interable;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Iterator;
/**
* array子类,扩展其迭代器的功能,倒序遍历
* foreach的实质: 调用迭代器的迭代方法,进行遍历 , 新增Iterable遍历方式
* @param <T>
*/
public class ArrayReverseClass<T> extends ArrayList<T>{
public ArrayReverseClass(Collection<T> c) {
super(c);
}
public Iterable<T> reversed() {
return new Iterable<T>() {
@Override
public Iterator<T> iterator() {
return new Iterator<T>() {
int current = size()-1;
@Override
public boolean hasNext() {
return current > -1;
}
@Override
public T next() {
return get(current--);
}
@Override
public void remove() {
}
};
}
};
}
public static void main(String[] args) {
ArrayReverseClass<String> arrayReverseClass = new ArrayReverseClass(Arrays.asList("1 2 3 4 5 6 ".split(" ")));
// for(A a : 迭代器子类)
for (String s : arrayReverseClass.reversed()) {
System.out.println(s);
}
}
}
更多推荐
已为社区贡献4条内容
所有评论(0)