一个LinkedList的问题

WintelZhao 2004-11-18 03:32:32
//Name.java
public class Name{
String fn;
}
//Ll.java
import java.util.*;

public class Ll{

public static void main(String[] args){
LinkedList lname = new LinkedList();
Name name=new Name();
ListIterator i = lname.listIterator();

for(int m=0;m<10;m++){
name.fn="fname"+m;
lname.add(name);
}

while(i.hasNext()){
System.out.println(((Name)i.next()).fn);
}
}
}

为什么抛出---------- Java ----------
java.util.ConcurrentModificationException
at java.util.LinkedList$ListItr.checkForComodification(LinkedList.java:552)
at java.util.LinkedList$ListItr.next(LinkedList.java:488)
at Ll.main(Ll.java:16)
Exception in thread "main"
输出完成 (耗时 2 秒) - 正常终止
错误???

还有如果改为不用ListIterator,
//Ll.java
import java.util.*;

public class Ll{

public static void main(String[] args){
LinkedList lname = new LinkedList();
Name name=new Name();

for(int m=0;m<10;m++){

name.fn="fname"+m;
lname.add(name);
}

for(int m=0;m<lname.size();m++){
System.out.println(((Name)lname.get(m)).fn);
}
}
}

返回的记过是10个fname9,而不是 fname0-9??????why????
...全文
132 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
St0ne82 2004-11-18
  • 打赏
  • 举报
回复
>>>>Name name=new Name();
for(int m=0;m<10;m++){

name.fn="fname"+m;
lname.add(name);
}


实际上这样的话,你往LinkedList中添加了10个引用,它们都指向了一个相同的Name对象.如果你不相信的话,你可以System.out.println(lname),你可以看到它们有着相同的内存地址(Name@XXXX,XXXX为地址).
treeroot 2004-11-18
  • 打赏
  • 举报
回复
真是服了你了,根本没有可以浪费的资源呀,一般使用ArrayList,删除比较频繁时使用LinkedList
基本不怎么使用Vector
WintelZhao 2004-11-18
  • 打赏
  • 举报
回复
for(int m=0;m<10;m++){
Name name=new Name();
name.fn="fname"+m;
lname.add(name);
}

这样了不浪费资源吗??
我就是想实现一套数据类,然后放在Vector或者ArrayList或者LinkedList。因为觉得使用大数组不是很好。这三个哪个比较好?!
treeroot 2004-11-18
  • 打赏
  • 举报
回复
第二个问题好无聊:
Name name=new Name();

for(int m=0;m<10;m++){
name.fn="fname"+m;
lname.add(name);
}
这样一个name加入了10次
改为:

for(int m=0;m<10;m++){
Name name=new Name();
name.fn="fname"+m;
lname.add(name);
}

treeroot 2004-11-18
  • 打赏
  • 举报
回复
获得迭代器后,如果又结构性改变(这里就是add),迭代器就会抛出这个异常.
Yansharp 2004-11-18
  • 打赏
  • 举报
回复
for(int m=0;m<10;m++){
name.fn="fname"+m;
LinkedList lname = new LinkedList();//把前面的那句,挪到这
lname.add(name);
}
coolrain82 2004-11-18
  • 打赏
  • 举报
回复
问题一:ListIterator i = lname.listIterator(); 这一句,应该放在加入元素之后;
问题二:你只产生了一个name对象,所以LinkedList全部放的都是那一个name对象,那个对象的成员fn当然是一样的了,你最后一次改变那个name对象的时候,m为9,所以该name对象的fn为9。所以返回的记过是10个fname9。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧