Java里面ArrayList用add添加的元素最后被覆盖,这是怎么回事?有高手告诉下吗?具体代码如下:

publicList<DemandDTO>findAll(){Iterator<Demand>demands=demandDAO.findAll().iterator()... public List<DemandDTO> findAll() {
Iterator<Demand> demands=demandDAO.findAll().iterator();
demanddtos=new ArrayList<DemandDTO>();
demanddto=new DemandDTO();
while(demands.hasNext())
{
Demand demand=demands.next();
demanddto.setPkDemandId(demand.getPkDemandId());
demanddto.setPkDeptId(demand.getDept().getPkDeptId());
demanddto.setDeptName(demand.getDept().getDeptName());
demanddto.setDeptLeader(demand.getDept().getDeptLeader());
demanddto.setDemandFrom(demand.getDemandFrom());
demanddto.setDemandMan(demand.getDemandMan());
demanddto.setDemandName(demand.getDemandName());
demanddto.setDemandCount(demand.getDemandCount());
demanddto.setFitResumeNum(fitResumeNum(demand.getPkDemandId()));
demanddto.setSendResumeNum(sendResumeNum());
demanddto.setJoinInterviewNum(joinInterviewNum());
demanddto.setThroughInterviewNum(throughInterviewNum());
demanddto.setStartTime(demand.getStartTime());
demanddto.setEndTime(demand.getEndTime());
demanddto.setDemandState(demand.getDemandState());
demanddto.setDemandDes(demand.getDemandDes());
demanddtos.add(demanddto);
}
return demanddtos;
}

在循环体内用system.out.println(demanddtos.get(0).getDemandName)输出的结果是正确的,可以输出demanddtos里面的添加的DemandName,也就是说,都添加到0这个位置了,这是为什么啊?Arraylist的add方法不是添加的元素都是添加到末尾吗?
展开
 我来答
独脚镇天山
推荐于2017-11-28 · TA获得超过532个赞
知道小有建树答主
回答量:314
采纳率:0%
帮助的人:166万
展开全部
请楼主认真看一看demanddto这个对象。自始至终,demanddto只new了一个对象,无论demands循环了多少次,始终用了demanddto这一个对象,那个demanddtos.add(demanddto);这一句其实加的都是同一个对象,那么当然里面始终只有一个对象了。楼主应该这样:
while(demands.hasNext())
{
Demand demand=demands.next();
demanddto=new DemandDTO();
...
demanddtos.add(demanddto);
}
return demanddtos;
这样,每循环一次都new了一个对象,Arraylist才会不断把新对象加到末尾
flyingFish211
2012-04-02 · TA获得超过2.1万个赞
知道大有可为答主
回答量:1.5万
采纳率:50%
帮助的人:1.1亿
展开全部
demanddto=new DemandDTO();
while(demands.hasNext())
{

调整为
while(demands.hasNext())
{
demanddto=new DemandDTO();

你在外面new, 由于地址永远不变,所以添加的始终是最后一个元素的内容
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
cxzucc
2012-04-02 · TA获得超过1317个赞
知道小有建树答主
回答量:1735
采纳率:79%
帮助的人:578万
展开全部
在Demand demand=demands.next();下面加一句demanddto=new DemandDTO();,你现在这样每次循环往list里里面放的都是同一个demanddto对象,只不过每次都重新给它的属性重新赋值了而已。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
y12345678909
2012-04-02 · TA获得超过678个赞
知道答主
回答量:173
采纳率:0%
帮助的人:94.4万
展开全部
demanddtos.add(demanddto);
添加的是对象,然后通过这个对象访问这些属性里的信息
追问
我知道啊,demanddtos.get(0)不就是取出了它里面的对象吗?然后直接在后面加上用访问getDemandName方法啊
追答
可能我没理解你问的意思,你把每次循环都放到同一个对象里了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式