public String toString() {
Iterator<E> it = iterator();
if (! it.hasNext())
return "[]";
StringBuilder sb = new StringBuilder();
sb.append('[');
for (;;) {
E e = it.next();
sb.append(e == this ? "(this Collection)" : e);
if (! it.hasNext())
return sb.append(']').toString();
sb.append(',').append(' ');
}
}
如果自己也在那个 iterator里面,那么this就会等于e
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class Test20190327 {
public static void main(String[] args) {
Whatever whatever1 = new Whatever();
Whatever whatever2 = new Whatever();
Whatever whatever3 = new Whatever();
Whatever whatever4 = new Whatever();
whatever3.addToList(whatever1);
whatever3.addToList(whatever2);
// 把自己加进这个list里面
whatever3.addToList(whatever3);
whatever3.addToList(whatever4);
System.out.println(whatever3.toString());
}
}
class Whatever<T> {
private List<T> list = new ArrayList<T>();
public void addToList(T t) {
list.add(t);
}
public Iterator<T> iterator() {
return list.iterator();
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
Iterator<T> it = iterator();
while(it.hasNext()) {
T t = it.next();
if (t == this) {
sb.append("[it's me]");
} else {
sb.append("[not me]");
}
}
return sb.toString();
}
}
结果
[not me][not me][it's me][not me]
这个要看iterator迭代器内部怎么实现的了。它什么情况下会让这个对象本身和迭代器下一个元素相等