日期:2014-05-20  浏览次数:20717 次

java 中ArrayList后添加的值自动更新前边添加的值,大神帮忙了,谢谢,只有25分了
出现的问题:arrayA添加的第二个对象自动更新第一个对象的值,arrayC,arrayD同样出现上述问题,更加不理解的事arrayC会更新arrayA,arrayD会更新arrayC,最后他们三个保存的对象具有完全一样的值。
[code=java][package GUI;

import java.util.ArrayList;
import java.util.Iterator;

import userbean.ACDbean;
import userbean.Taskbean;
import database.DataBase;
import database.DefaultDataBase;

public class ShowTable {
/*
 * 根据选中的树节点,从数据库中读出信息
 */
private MainInterface mainInterface;/*主界面*/
private String task;/*任务名称*/

private DataBase db=new DefaultDataBase();/*数据库*/
private Taskbean tb;/*task相关信息bean*/
// private ACDbean approach,dm,cri;/*approach,decision makers,criteria*/

private ArrayList<ACDbean> arrayA=new ArrayList<ACDbean>();;
private ArrayList<ACDbean> arrayD=new ArrayList<ACDbean>();
private ArrayList<ACDbean> arrayC=new ArrayList<ACDbean>();

private ArrayList<Integer> arrayList;

public static final String approachTable="approach";
public static final String criteriaTable="criteria";
public static final String dmTable="dm";

public ShowTable(MainInterface mainInterface,String task){
this.task=task;
this.mainInterface=mainInterface;

tb=((DefaultDataBase)db).getTask(task);/*从数据库中获得TASK表*/
initACDT();
initTables();
mainInterface.initShowPane(arrayA,arrayC,arrayD);

db.closeResultSet();
initTaskShow();


}

public void initTaskShow(){
if(tb==null)
return;
mainInterface.seteIdLabel(tb.getTASK_ID());
mainInterface.seteNameLabel(tb.getTASK_NAME());
mainInterface.seteStatusLabel(tb.getTASK_STATUS());
mainInterface.seteTimeLabel(tb.getTASK_TIME());
}

public void initTables(){


}
public void initACDT(){
/*
 * 从数据库中依次读出APPROACH,CRITERIA,DECISION MAKERS;
 */

/*从数据库中读出approach,并且写入到arrayList的*/

arrayList=tb.getArray(tb.getTASK_APPROACH());/*得到approach的id*/

Iterator iterator=arrayList.iterator();

while(iterator.hasNext()){
int id=((Integer)iterator.next()).intValue();
ACDbean approach=((DefaultDataBase)db).getACD(id,approachTable);/*返回保存appproach的ACDbean*/
arrayA.add(approach);
db.closeResultSet();
}

db.closeResultSet();


/*从数据库中读出criteria*/
arrayList=tb.getArray(tb.getTASK_CRI());/*得到criteria的id*/
iterator=arrayList.iterator();
while(iterator.hasNext()){
int id=((Integer)iterator.next()).intValue();
ACDbean dm=((DefaultDataBase)db).getACD(id,criteriaTable);/*得到保存criteria的ACDbean*/
arrayD.add(dm);
}

db.closeResultSet();

/*从数据库中读出decision makers*/
arrayList=tb.getArray(tb.getTASK_DM());
iterator=arrayList.iterator();
while(iterator.hasNext()){
int id=((Integer)iterator.next()).intValue();
ACDbean cri=((DefaultDataBase)db).getACD(id,dmTable);
arrayC.add(cri);
}

db.closeResultSet();
}

}
/code]
歇歇le

------解决方案--------------------
输出一下arrayList
看看得到的是几个地址值。
另外while(iterator.hasNext()){
里面输出一下int id看看
------解决方案--------------------