import java.util.List;
import java.util.ArrayList;
import java.util.ListIterator;
public class Text{
public static void main(String[] args){
List<Book> list = new ArrayList<Book>();
list.add(new Book("1","张三"));
list.add(new Book("2","李四"));
list.add(new Book("3","王五")); ListIterator li = list.listIterator();
while(li.hasNext()){
Book student = (Book)li.next();
if( student.equals(new Book("3","王五"))){
li.add(new Book("4","麻六"));
}
System.out.println(student.getId() + student.getName());
}
}
}
import java.util.ArrayList;
import java.util.ListIterator;
public class Text{
public static void main(String[] args){
List<Book> list = new ArrayList<Book>();
list.add(new Book("1","张三"));
list.add(new Book("2","李四"));
list.add(new Book("3","王五")); ListIterator li = list.listIterator();
while(li.hasNext()){
Book student = (Book)li.next();
if( student.equals(new Book("3","王五"))){
li.add(new Book("4","麻六"));
}
System.out.println(student.getId() + student.getName());
}
}
}
public static void main(String[] args) {
if (args.length == 0) {
System.out.println("no args.");
}
}
}像楼主的代码层级多,又没有排版,没法看。
1:频繁的使用new ,对于List来说,是通过equals方法来判断一个对象和另一个对象是否相同。而在list的底层,equals()判断条件是根据两个对象的内存地址来判断的。楼主虽然传的构造方法中参数是一样的,但是实际内存开辟空间的地址并不一样。
2:在对集合遍历的过程中,是不允许对集合整体进行添加或者删除操作,否则会触发并发修改异常,看群主要求是添加,那么正确的做法,是调用迭代器本身的remove方法删除他,并且重构数据,用另一个集合去暂存数据,遍历完成之后然后把暂存数据的那个集合添加到最初定义的那个集合里面。
import java.util.*;
public class Test{
public static void main(String[] args){
List<Book> list = new ArrayList<Book>();
Book b1 = new Book("1","张三");
Book b2 = new Book("2","李四");
Book b3 = new Book("3","王五");
Collections.addAll(list,b1,b2,b3); List<Book> list1 = new ArrayList<Book>();
for(Iterator<Book> car = list.iterator();car.hasNext();){
Book b = car.next();
if(b.equals(new Book("3","王五"))){
car.remove();
list1.add(new Book("4","小明"));
}
}
list.addAll(list1);
for(Book bs:list){
System.out.println(bs.id+" "+bs.name);
}
}
}
class Book{
String id;
String name;
public Book(String id,String name){
this.id = id;
this.name = name;
}
@Override
public boolean equals(Object obj){
if(obj == this) return true;
if(!(obj instanceof Book)) return false;
if(obj == null) return false;
Book book = (Book)obj;
return this.id.equals(book.id) &&
this.name.equals(book.name);
}
}