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方法不是添加的元素都是添加到末尾吗? 展开
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方法不是添加的元素都是添加到末尾吗? 展开
4个回答
展开全部
请楼主认真看一看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才会不断把新对象加到末尾
while(demands.hasNext())
{
Demand demand=demands.next();
demanddto=new DemandDTO();
...
demanddtos.add(demanddto);
}
return demanddtos;
这样,每循环一次都new了一个对象,Arraylist才会不断把新对象加到末尾
展开全部
demanddto=new DemandDTO();
while(demands.hasNext())
{
调整为
while(demands.hasNext())
{
demanddto=new DemandDTO();
你在外面new, 由于地址永远不变,所以添加的始终是最后一个元素的内容
while(demands.hasNext())
{
调整为
while(demands.hasNext())
{
demanddto=new DemandDTO();
你在外面new, 由于地址永远不变,所以添加的始终是最后一个元素的内容
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
在Demand demand=demands.next();下面加一句demanddto=new DemandDTO();,你现在这样每次循环往list里里面放的都是同一个demanddto对象,只不过每次都重新给它的属性重新赋值了而已。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
demanddtos.add(demanddto);
添加的是对象,然后通过这个对象访问这些属性里的信息
添加的是对象,然后通过这个对象访问这些属性里的信息
追问
我知道啊,demanddtos.get(0)不就是取出了它里面的对象吗?然后直接在后面加上用访问getDemandName方法啊
追答
可能我没理解你问的意思,你把每次循环都放到同一个对象里了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询