菜鸟笔记,java新手。
remove()函数删除的是迭代器所指向位置左边的对象,因为要删除某一对象,需要先用next()函数访问,访问之后迭代器的位置就更新了,因此调用remove()的时候删除的是左边的对象,为非hasnext()时的右边的对象。
class boy{
private String name;
@Override
public String toString() {
return "i am a boy";
}
public boy(String name){
this.name=name;
}
public String get_name(){
return name;
}
}
public class testtt2 {
public enum mycolor{red,blue,green};
public static void main(String[] args) {
Collection<boy> s=new HashSet<boy>();
s.add(new boy("jack"));
s.add(new boy("nio"));
s.add(new boy("tom"));
for(Iterator it=s.iterator();it.hasNext();){
boy b=(boy)it.next(); //在做判断之后迭代器已经更新了,因此删除的是迭代器左边的元素。
if(b.get_name()=="nio")
it.remove();
}
for(Iterator it=s.iterator();it.hasNext();){
boy b=(boy)it.next();
System.out.println(b.get_name());//果然,被删除的是nio而不是其他的,因为HashSet是没有顺序的因此不清楚下一个会是谁。
}
}