Arraylist的add方法不是添加的元素都是添加到末尾吗?以下这种情况是为什么呢?

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这个位置了,这是为什么啊?

慕标5832272
浏览 610回答 4
4回答

慕尼黑8549860

自始至终,demanddto只new了一个对象,无论demands循环了多少次,始终用了demanddto这一个对象,那个demanddtos.add(demanddto);这一句其实加的都是同一个对象,那么当然里面始终只有一个对象了。你应该这样: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, 由于地址永远不变,所以添加的始终是最后一个元素的内容

泛舟湖上清波郎朗

在Demand demand=demands.next();下面加一句demanddto=new DemandDTO();,你现在这样每次循环往list里里面放的都是同一个demanddto对象,只不过每次都重新给它的属性重新赋值了而已。

Qyouu

demanddtos.add(demanddto);添加的是对象,然后通过这个对象访问这些属性里的信息
打开App,查看更多内容
随时随地看视频慕课网APP