Iterator删除集合元素
标签(空格分隔): j2se
Iterator 接口 也是Java集合框架成员,它主要用来遍历(即迭代访问)Collection集合中的元素,Iterator 对象也称为迭代器
boolean hasNext(): 如果迭代中的集合元素没有被遍历完,则返回
true
Object next(): 返回集合中的下一个元素
- void remove(): 删除集合里上一次next方法返回的元素
Iterator模式是用于遍历集合类的标准访问方法。它可以把访问逻辑从不同类型的集合类中抽象出来,从而避免向客户端暴露集合的内部结构。
public static void forRemove(List<String> list,String target){
for(int i = 0;i<list.size();i++){
if(list.get(i).equals(target)){
list.remove(i);
}
}
}
public static void IteratorRemove(List<String> list,String target){
Iterator<String> iterator = list.iterator();
while(iterator.hasNext()){
String s = iterator.next();
if(s.equals(target)){
iterator.remove();
}
}
}
public static void IteratorRemoveStu(List<Student> list,String str){
Iterator<Student> iterator = list.iterator();
while(iterator.hasNext()){
Student stu = iterator.next();
if(stu.getName().equals(str)){
iterator.remove();
}
}
}
main测试
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("a");
list.add("b");
list.add("c");
list.add("d");
list.add("e");
list.add("c");
/*IteratorRemove(list,"c");*/
/*forRemove(list,"c");*/
List<Student> listStu = new ArrayList<>();
listStu.add(new Student("张三", 25));
listStu.add(new Student("李四", 36));
listStu.add(new Student("王五", 12));
listStu.add(new Student("李四", 36));
listStu.add(new Student("张三", 25));
/*for(String str:list){
System.out.println(str);
}*/
IteratorRemoveStu(listStu,"张三");
for(Student stu :listStu){
System.out.println(stu);
}
}
forRemove
这种方法,数据量大时,效率特别低
Itreator 必须依附于Collection 对象,Iterator 迭代器采用的是快速失败(fail-fast)机制,一旦迭代过程中检测到该集合已经被修改(通常是程序中的其他线程修改),程序立即引发ConcurrentModificationException异常,而不是显示修改后的结果,这样可以避免共享资源引发的潜在问题
注意:
foreach 循环迭代访问元素集合更加便捷,但是foreach循环中迭代变量也不是集合本身,系统只是将集合依次元素的赋值给迭代变量,并不能在用于删除集合。