社区微信群开通啦,扫一扫抢先加入社区官方微信群
社区微信群
感觉太复杂了,看起来头疼,自己看源码画了一个和迭代器有关的类图(以ArrayList为例,java8):
package designpattern.iterator; import java.util.Iterator; public interface MyList<E> extends Iterable<E> {// 为了客户端直接通过接口使用foreach方法 void set(E e, int index); E get(int index); void remove(int index);// 数组实现,有点麻烦,就不写了 void changeIterator(Iterator iterator); int getSize(); }
package designpattern.iterator; import java.util.Iterator; public class MyArrayList<E> implements MyList<E>, Iterable<E> { E[] data; private int size; Iterator<E> iterator; public MyArrayList(E[] data) { super(); this.data = data; size = data.length; iterator = new MyInteratorAsc<>(this);// 默认使用正序迭代器 } @Override public void set(E e, int index) { if (index < size) { data[index] = e; } else { System.out.println(index + "大于数组大小"); } } @Override public E get(int index) { return data[index]; } @Override public Iterator<E> iterator() { return iterator; } @Override public void remove(int index) { throw new UnsupportedOperationException("暂未实现"); } @Override public int getSize() { return size; } @Override public void changeIterator(Iterator iterator) { this.iterator = iterator; } }
package designpattern.iterator; import java.util.Iterator; public class MyInteratorAsc<E> implements Iterator<E> { MyList<E> myList; public MyInteratorAsc(MyList<E> myList) { super(); this.myList = myList; this.current = 0; } int current; @Override public boolean hasNext() { if (current < myList.getSize()) { return true; } else { return false; } } @Override public E next() { return myList.get(current++); } }
package designpattern.iterator; import java.util.Iterator; public class MyInteratorDesc<E> implements Iterator<E> { MyList<E> myList; public MyInteratorDesc(MyList<E> myList) { super(); this.myList = myList; this.current = myList.getSize() - 1; } int current; @Override public boolean hasNext() { if (current >= 0) { return true; } else { return false; } } @Override public E next() { return myList.get(current--); } }
package designpattern.iterator; public class Client { public static void main(String[] args) { MyList<String> myList = new MyArrayList<>(new String[4]); myList.set("鼠", 0); myList.set("牛", 1); myList.set("虎", 2); myList.set("兔", 3); myList.set("龙", 4); for (String string : myList) { System.out.println(string); } System.out.println("-------换成倒序-------"); myList.changeIterator(new MyInteratorDesc<>(myList)); for (String string : myList) { System.out.println(string); } } }
4大于数组大小 鼠 牛 虎 兔 -------换成倒序------- 兔 虎 牛 鼠
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!