问题描述
在不使用迭代器的情况下能删除存在集合内的对象吗?如:Setset=newHashSet();使用set.remove();删除对象,而不使用iter.remove()。importjava.util.*;publicclassTestSet{publicstaticvoidmain(String[]args){Personp1=newPerson(1,"per1","male");Personp2=newPerson(2,"per2","male");Personp3=newPerson(3,"per3","male");Personp4=newPerson(4,"per4","male");Personp5=newPerson(5,"per5","male");PersonremovePerson=newPerson(4,null,null);Setset=newHashSet();set.add(p1);set.add(p2);set.add(p3);set.add(p4);set.add(p5);Iteratoriter=set.iterator();System.out.println("利用集合的remove():方法删除:");System.out.println("利用迭代器的remove()方法删除:");Iteratoriter2=set.iterator();while(iter2.hasNext()){Personperson=(Person)iter2.next();if(person.equals(removePerson)){iter2.remove();}}System.out.println(set);System.out.println(set.size());}}classPerson{intid;publicintgetId(){returnid;}publicvoidsetId(intid){this.id=id;}publicStringgetName(){returnname;}publicvoidsetName(Stringname){this.name=name;}publicStringgetSex(){returnsex;}publicvoidsetSex(Stringsex){this.sex=sex;}Stringname,sex;publicPerson(intid,Stringname,Stringsex){this.id=id;this.name=name;this.sex=sex;}@OverridepublicStringtoString(){return"Person[id="+id+",name="+name+",sex="+sex+"]";}publicbooleanequals(Objectobj){if(obj==null){returnfalse;}if(objinstanceofPerson){PersontempPerson=(Person)obj;if(this.id==tempPerson.id){returntrue;}}returnfalse;}publicinthashCode(){returnthis.name.hashCode();}}
解决方案
解决方案二:
删除单个:set.remove(p1);
全删:set.clear();
解决方案三:
我这问的是怎么在不使用迭代器的情况下找到和removePerson的Id相同的对象,然后使用set.remove()方法删除?
解决方案四:
这里使用迭代器后再使用set.remove()方法会出现快速失败异常....
解决方案五:
Iteratoriter2=set.iterator();while(iter2.hasNext()){Personperson=(Person)iter2.next();if(person.equals(removePerson)){set.remove(person);}}
解决方案六:
迭代器里不能删除操作的。
解决方案七:
引用2楼rookiejp的回复:
我这问的是怎么在不使用迭代器的情况下找到和removePerson的Id相同的对象,然后使用set.remove()方法删除?
packagecom.xuz.csdn.nov24;importjava.util.HashSet;importjava.util.Set;publicclassSetRemove{publicstaticvoidmain(String[]args){Set<String>set=newHashSet<String>();set.add("5");set.add("2");set.add("4");set.add("1");set.remove("5");System.out.println(set);}}
解决方案八:
引用2楼rookiejp的回复:
我这问的是怎么在不使用迭代器的情况下找到和removePerson的Id相同的对象,然后使用set.remove()方法删除?
没仔细看,按id批量删除么?
解决方案九:
引用4楼tsjguaiguai的回复:
Iteratoriter2=set.iterator();while(iter2.hasNext()){Personperson=(Person)iter2.next();if(person.equals(removePerson)){set.remove(person);}}
这种方法不行,如果将removePerson的Id改为其他数的话会出现快速失败异常。
解决方案十:
引用7楼dr_lou的回复:
引用2楼rookiejp的回复:我这问的是怎么在不使用迭代器的情况下找到和removePerson的Id相同的对象,然后使用set.remove()方法删除?没仔细看,按id批量删除么?
在set集合中删除Id与removePeron相同的对象...
解决方案十一:
引用6楼dr_lou的回复:
引用2楼rookiejp的回复:我这问的是怎么在不使用迭代器的情况下找到和removePerson的Id相同的对象,然后使用set.remove()方法删除?Javacodepackagecom.xuz.csdn.nov24;importjava.util.HashSet;importjava.util.Set;publicclass……
string能这么删,如果set内存的是对象呢?