package hb.list;
import hb.util.Person;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
public class RemoveListObject {
public static void main(String[] args) {
LinkedList list = new LinkedList();
for(int i = 0 ; i < 6; i++){
Person p = new Person();
p.setName("name" + i);
p.setPassword("password"+i);
list.add(p);
}
//LinkedList有克隆的方法,但是接口List是没有的
List list2 = (List)list.clone();
printList(list);
//遍历的长度一定要是list.size(),因为后面移除对象之后就会导致list长度变化,如果使用常量,会导致边界异常
//例如:长度是100,删除掉了50个,而获取list对象的51个,则会爆边界异常,因此是使用list.size()
for(int i=0;i<list.size();i++){
Person obj = (Person)list.get(i);
if(obj.getName().equals("name3")){
list.remove(i);
//for循环是先根据中间的值判断是否为true,然后再执行后面的i++
i--;
}
}
printList(list);
//一般我们使用
Iterator it = list2.iterator();
while(it.hasNext()){
Person tempobj = (Person)it.next();
if(tempobj.getName().equals("name2")){
//移除当前的对象
it.remove();
}
}
printList(list2);
}
public static String printList(List list){
String result = "";
for(int i=0; i< list.size();i++){
result = result + ((Person)list.get(i)).getName()+"----";
}
System.out.println(result);
return result;
}
}
原因:List每remove掉一个元素以后,后面的元素都会向前移动,此时如果执行i=i+1,则刚刚移过来的元素没有被读取。