Java 如何将()ArrayList添加到2D ArrayList而不覆盖以前的条目?

Java 如何将()ArrayList添加到2D ArrayList而不覆盖以前的条目?,java,android,arrays,2d,overwrite,Java,Android,Arrays,2d,Overwrite,好的,我知道为什么会这样:cv.add(curid,temp);正在添加对temp的引用,temp的内容稍后会更改,导致所有条目都相同,因为它们都链接到temp。我查找了解决方案,但找不到适用于我的情况的解决方案,请参见以下内容: XmlPullParserFactory factory = XmlPullParserFactory.newInstance(); factory.setNamespaceAware(false); Contex

好的,我知道为什么会这样:cv.add(curid,temp);正在添加对temp的引用,temp的内容稍后会更改,导致所有条目都相同,因为它们都链接到temp。我查找了解决方案,但找不到适用于我的情况的解决方案,请参见以下内容:

         XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
         factory.setNamespaceAware(false);
         Context context = getApplicationContext();
         Resources res = context.getResources();
         XmlResourceParser xpp = res.getXml(R.xml.thedata);
         ArrayList<ArrayList<String>> cv = new ArrayList<ArrayList<String>>();

         //Helper stuff
         int curid = 0;
         ArrayList<String> temp = new ArrayList<String>();

         int eventType = xpp.getEventType();
         while (eventType != XmlPullParser.END_DOCUMENT) {
             if (eventType == XmlPullParser.START_TAG) {
                 if(xpp.getName().equalsIgnoreCase("id")){
                     curid = Integer.parseInt(xpp.nextText());
                 } 
                 if(xpp.getName().equalsIgnoreCase("room") == false && xpp.getName().equalsIgnoreCase("id") == false && xpp.getName().equalsIgnoreCase("data") == false){
                     temp.add(xpp.getName() + "<>" + xpp.nextText());
                 }

             } 
             else if(eventType==XmlPullParser.END_TAG && xpp.getName().equalsIgnoreCase("room")){
                 cv.add(curid, temp);
                 temp.clear();
             }
             eventType = xpp.next(); //move to next element
             //Restart Loop
         }
XmlPullParserFactory工厂=XmlPullParserFactory.newInstance();
factory.setNamespaceAware(false);
Context=getApplicationContext();
Resources res=context.getResources();
XmlResourceParser xpp=res.getXml(R.xml.thedata);
ArrayList cv=新的ArrayList();
//辅助材料
int-curid=0;
ArrayList temp=新的ArrayList();
int eventType=xpp.getEventType();
while(eventType!=XmlPullParser.END_文档){
if(eventType==XmlPullParser.START_标记){
if(xpp.getName().equalsIgnoreCase(“id”)){
curid=Integer.parseInt(xpp.nextText());
} 
if(xpp.getName().equalsIgnoreCase(“房间”)==false&&xpp.getName().equalsIgnoreCase(“id”)==false&&xpp.getName().equalsIgnoreCase(“数据”)==false){
临时添加(xpp.getName()+“”+xpp.nextText());
}
} 
else if(eventType==XmlPullParser.END_标记&&xpp.getName().equalsIgnoreCase(“房间”)){
cv.添加(居里、温度);
温度清除();
}
eventType=xpp.next();//移动到下一个元素
//重新启动循环
}
我需要首先在循环中填充ArrayList temp,这使得我发现的解决方案不适用

为什么不将所有的“Helper内容”移动到Helper方法中呢

public ArrayList<String> helperMethod(XmlResourceParser xpp, MutableInt id) {
     int curid = 0;
     ArrayList<String> temp = new ArrayList<String>();

     int eventType = xpp.getEventType();
     while (eventType != XmlPullParser.END_DOCUMENT) {
         if (eventType == XmlPullParser.START_TAG) {
             if(xpp.getName().equalsIgnoreCase("id")){
                 curid = Integer.parseInt(xpp.nextText());
             } 
             if(xpp.getName().equalsIgnoreCase("room") == false && xpp.getName().equalsIgnoreCase("id") == false && xpp.getName().equalsIgnoreCase("data") == false){
                 temp.add(xpp.getName() + "<>" + xpp.nextText());
             }

         } 
         else if(eventType==XmlPullParser.END_TAG && xpp.getName().equalsIgnoreCase("room")){
             id.setValue(curid);
             break;
         }
         eventType = xpp.next(); //move to next element
         //Restart Loop
     }
     return temp;
}
public ArrayList helperMethod(XmlResourceParser-xpp,MutableInt-id){
int-curid=0;
ArrayList temp=新的ArrayList();
int eventType=xpp.getEventType();
while(eventType!=XmlPullParser.END_文档){
if(eventType==XmlPullParser.START_标记){
if(xpp.getName().equalsIgnoreCase(“id”)){
curid=Integer.parseInt(xpp.nextText());
} 
if(xpp.getName().equalsIgnoreCase(“房间”)==false&&xpp.getName().equalsIgnoreCase(“id”)==false&&xpp.getName().equalsIgnoreCase(“数据”)==false){
临时添加(xpp.getName()+“”+xpp.nextText());
}
} 
else if(eventType==XmlPullParser.END_标记&&xpp.getName().equalsIgnoreCase(“房间”)){
id.setValue(curid);
打破
}
eventType=xpp.next();//移动到下一个元素
//重新启动循环
}
返回温度;
}
那么你可以这样称呼它

ArrayList<String> tempList;
MutableInt id = new MutableInt(0);
while((tempList = helperMethod(xpp, id)) != null) {
    cv.add(id, tempList);
}
arraylisttemplast;
MutableInt id=新的MutableInt(0);
while((templast=helperMethod(xpp,id))!=null){
简历添加(id,圣殿骑士);
}
为什么不将所有的“Helper内容”移动到Helper方法中

public ArrayList<String> helperMethod(XmlResourceParser xpp, MutableInt id) {
     int curid = 0;
     ArrayList<String> temp = new ArrayList<String>();

     int eventType = xpp.getEventType();
     while (eventType != XmlPullParser.END_DOCUMENT) {
         if (eventType == XmlPullParser.START_TAG) {
             if(xpp.getName().equalsIgnoreCase("id")){
                 curid = Integer.parseInt(xpp.nextText());
             } 
             if(xpp.getName().equalsIgnoreCase("room") == false && xpp.getName().equalsIgnoreCase("id") == false && xpp.getName().equalsIgnoreCase("data") == false){
                 temp.add(xpp.getName() + "<>" + xpp.nextText());
             }

         } 
         else if(eventType==XmlPullParser.END_TAG && xpp.getName().equalsIgnoreCase("room")){
             id.setValue(curid);
             break;
         }
         eventType = xpp.next(); //move to next element
         //Restart Loop
     }
     return temp;
}
public ArrayList helperMethod(XmlResourceParser-xpp,MutableInt-id){
int-curid=0;
ArrayList temp=新的ArrayList();
int eventType=xpp.getEventType();
while(eventType!=XmlPullParser.END_文档){
if(eventType==XmlPullParser.START_标记){
if(xpp.getName().equalsIgnoreCase(“id”)){
curid=Integer.parseInt(xpp.nextText());
} 
if(xpp.getName().equalsIgnoreCase(“房间”)==false&&xpp.getName().equalsIgnoreCase(“id”)==false&&xpp.getName().equalsIgnoreCase(“数据”)==false){
临时添加(xpp.getName()+“”+xpp.nextText());
}
} 
else if(eventType==XmlPullParser.END_标记&&xpp.getName().equalsIgnoreCase(“房间”)){
id.setValue(curid);
打破
}
eventType=xpp.next();//移动到下一个元素
//重新启动循环
}
返回温度;
}
那么你可以这样称呼它

ArrayList<String> tempList;
MutableInt id = new MutableInt(0);
while((tempList = helperMethod(xpp, id)) != null) {
    cv.add(id, tempList);
}
arraylisttemplast;
MutableInt id=新的MutableInt(0);
while((templast=helperMethod(xpp,id))!=null){
简历添加(id,圣殿骑士);
}
为什么不将所有的“Helper内容”移动到Helper方法中

public ArrayList<String> helperMethod(XmlResourceParser xpp, MutableInt id) {
     int curid = 0;
     ArrayList<String> temp = new ArrayList<String>();

     int eventType = xpp.getEventType();
     while (eventType != XmlPullParser.END_DOCUMENT) {
         if (eventType == XmlPullParser.START_TAG) {
             if(xpp.getName().equalsIgnoreCase("id")){
                 curid = Integer.parseInt(xpp.nextText());
             } 
             if(xpp.getName().equalsIgnoreCase("room") == false && xpp.getName().equalsIgnoreCase("id") == false && xpp.getName().equalsIgnoreCase("data") == false){
                 temp.add(xpp.getName() + "<>" + xpp.nextText());
             }

         } 
         else if(eventType==XmlPullParser.END_TAG && xpp.getName().equalsIgnoreCase("room")){
             id.setValue(curid);
             break;
         }
         eventType = xpp.next(); //move to next element
         //Restart Loop
     }
     return temp;
}
public ArrayList helperMethod(XmlResourceParser-xpp,MutableInt-id){
int-curid=0;
ArrayList temp=新的ArrayList();
int eventType=xpp.getEventType();
while(eventType!=XmlPullParser.END_文档){
if(eventType==XmlPullParser.START_标记){
if(xpp.getName().equalsIgnoreCase(“id”)){
curid=Integer.parseInt(xpp.nextText());
} 
if(xpp.getName().equalsIgnoreCase(“房间”)==false&&xpp.getName().equalsIgnoreCase(“id”)==false&&xpp.getName().equalsIgnoreCase(“数据”)==false){
临时添加(xpp.getName()+“”+xpp.nextText());
}
} 
else if(eventType==XmlPullParser.END_标记&&xpp.getName().equalsIgnoreCase(“房间”)){
id.setValue(curid);
打破
}
eventType=xpp.next();//移动到下一个元素
//重新启动循环
}
返回温度;
}
那么你可以这样称呼它

ArrayList<String> tempList;
MutableInt id = new MutableInt(0);
while((tempList = helperMethod(xpp, id)) != null) {
    cv.add(id, tempList);
}
arraylisttemplast;
MutableInt id=新的MutableInt(0);
while((templast=helperMethod(xpp,id))!=null){
简历添加(id,圣殿骑士);
}
为什么不将所有的“Helper内容”移动到Helper方法中

public ArrayList<String> helperMethod(XmlResourceParser xpp, MutableInt id) {
     int curid = 0;
     ArrayList<String> temp = new ArrayList<String>();

     int eventType = xpp.getEventType();
     while (eventType != XmlPullParser.END_DOCUMENT) {
         if (eventType == XmlPullParser.START_TAG) {
             if(xpp.getName().equalsIgnoreCase("id")){
                 curid = Integer.parseInt(xpp.nextText());
             } 
             if(xpp.getName().equalsIgnoreCase("room") == false && xpp.getName().equalsIgnoreCase("id") == false && xpp.getName().equalsIgnoreCase("data") == false){
                 temp.add(xpp.getName() + "<>" + xpp.nextText());
             }

         } 
         else if(eventType==XmlPullParser.END_TAG && xpp.getName().equalsIgnoreCase("room")){
             id.setValue(curid);
             break;
         }
         eventType = xpp.next(); //move to next element
         //Restart Loop
     }
     return temp;
}
public ArrayList helperMethod(XmlResourceParser-xpp,MutableInt-id){
int-curid=0;
ArrayList temp=新的ArrayList();
int eventType=xpp.getEventType();
while(eventType!=XmlPullParser.END_文档){
if(eventType==XmlPullParser.START_标记){
if(xpp.getName().equalsIgnoreCase(“id”)){
curid=Integer.parseInt(xpp.nextText());
} 
if(xpp.getName().equalsIgnoreCase(“房间”)==false&&xpp.getName().equalsIgnoreCase(“id”)==false&&xpp.getName().equalsIgnoreCase(“数据”)==false){