2014-03-05 20 views
0

我有兩個ArrayList類型相同的對象。想通過修改必要的修改來將一個人的數據複製到另一個人。但是這改變了我的兩個對象的效果。以下是代碼。ArrayLists在Android中指向相同的對象或數據

private ArrayList<Class_Summery_Enrollment> arrangeRecords(ArrayList<Class_Summery_Enrollment> source){ 
    ArrayList<Class_Summery_Enrollment> records = new ArrayList<Class_Summery_Enrollment>(); 
    ArrayList<Class_Meeting_Pattern_Enrollment> pattersList = new ArrayList<Class_Meeting_Pattern_Enrollment>(); 
    Class_Meeting_Pattern_Enrollment meetingPatternRec; 
    Class_Summery_Enrollment rec = new Class_Summery_Enrollment(); 

    for(int i = 0 ;i<source.size();i++){ 
     if(source.get(i).getClass_MEETING_PATTERNS().size()>1){ 
      Log.v(Constants.TAG, "Total Patterns = "+source.get(i).getClass_MEETING_PATTERNS().size()); 
      int size_ = source.get(i).getClass_MEETING_PATTERNS().size(); 
      for(int c = 0;c<size_;c++){ 
       rec = new Class_Summery_Enrollment(); 
       rec = source.get(i); 
       if(c==0){ 
        for (int k =0;k<source.get(i).getClass_MEETING_PATTERNS().size();k++){ 
         pattersList.add(source.get(i).getClass_MEETING_PATTERNS().get(k)); 
        } 
       } 
       rec.getClass_MEETING_PATTERNS().get(0).setSsr_INSTR_LONG(pattersList.get(c).getSsr_INSTR_LONG()); 
       rec.getClass_MEETING_PATTERNS().get(0).setSsr_MTG_LOC_LONG(pattersList.get(c).getSsr_MTG_LOC_LONG()); 
       rec.getClass_MEETING_PATTERNS().get(0).setSsr_MTG_DT_LONG(pattersList.get(c).getSsr_MTG_DT_LONG()); 
       rec.getClass_MEETING_PATTERNS().get(0).setSsr_MTG_SCHED_LONG(pattersList.get(c).getSsr_MTG_SCHED_LONG()); 
       records.add(rec); 
      } 
     }else{ 
      records.add(source.get(i)); 
     } 
    } 
    return records; 

} 
+1

您是否在尋找.clone()或許?很難理解你的問題。 – mach

回答

1

在Java中,當你說這就是Object o1= o2;意味着你正試圖使一個新的對象調用o1擁有的o2相同的地址。 SO,你實際上只創建了一個對象並且在其上創建了兩個對象。修改這個對象將反映在對象本身上,並從任何對象地址訪問它將導致相同的結果。

您需要通過與真實值手動執行復制使用的Deep Copy概念不是參照,因爲這個Article瞭解它

+0

你是對的拉赫曼,但如何?嘗試多種方式!都是徒勞的,請你用我的示例代碼實現。 – user1398739

0

我通過傳遞自定義對象在構造函數中解決這個問題。在上面的代碼中,我分配給其他對象的引用,因爲它們都指向相同的位置。以下代碼將幫助你的人。

enter code here 
    private ArrayList<NormalizedClassRecords> reArrangeRecs(ArrayList<Class_Enrollment> source){  
    ArrayList<NormalizedClassRecords> records = new ArrayList<NormalizedClassRecords>(); 
    NormalizedClassRecords normalizedRec = new NormalizedClassRecords(); 
    for(int i=0;i<source.size();i++){ 
     NormalizedClassRecords rec = new NormalizedClassRecords(normalizedRec); 
     rec.setCourseId(source.get(i).getCourseId()); 
     rec.setDescription(source.get(i).getDescription()); 
     for(int j=0;j<source.get(i).getAdviseclasses().size();j++){ 
      NormalizedClassRecords rec2 = new NormalizedClassRecords(rec);    
      rec2.setClassnbr(source.get(i).getAdviseclasses().get(j).getClassnbr()); 
      rec2.setRoomLocation(source.get(i).getAdviseclasses().get(j).getRoomLocation()); 
      rec2.setSubjectArea(source.get(i).getAdviseclasses().get(j).getSubjectArea()); 
      rec2.setSection(source.get(i).getAdviseclasses().get(j).getSection()); 
      rec2.setCatalogNbr(source.get(i).getAdviseclasses().get(j).getCatalogNbr()); 
      for(int k=0;k<source.get(i).getAdviseclasses().get(j).getMeetingPat().size();k++){ 
       NormalizedClassRecords rec3 = new NormalizedClassRecords(rec2); 
       rec3.setInstructorName(source.get(i).getAdviseclasses().get(j).getMeetingPat().get(k).getInstructorName()); 
       rec3.setMeetingStartTime(source.get(i).getAdviseclasses().get(j).getMeetingPat().get(k).getMeetingStartTime()); 
       rec3.setMeetingEndTime(source.get(i).getAdviseclasses().get(j).getMeetingPat().get(k).getMeetingEndTime()); 
       rec3.setStartDate(source.get(i).getAdviseclasses().get(j).getMeetingPat().get(k).getStartDate()); 
       rec3.setEndDate(source.get(i).getAdviseclasses().get(j).getMeetingPat().get(k).getEndDate()); 
       rec3.setMonday(source.get(i).getAdviseclasses().get(j).getMeetingPat().get(k).getMonday()); 
       rec3.setTuesday(source.get(i).getAdviseclasses().get(j).getMeetingPat().get(k).getTuesday()); 
       rec3.setWednesday(source.get(i).getAdviseclasses().get(j).getMeetingPat().get(k).getWednesday()); 
       rec3.setThursday(source.get(i).getAdviseclasses().get(j).getMeetingPat().get(k).getThursday()); 
       rec3.setFriday(source.get(i).getAdviseclasses().get(j).getMeetingPat().get(k).getFriday()); 
       rec3.setSaturday(source.get(i).getAdviseclasses().get(j).getMeetingPat().get(k).getSaturday()); 
       rec3.setSunday(source.get(i).getAdviseclasses().get(j).getMeetingPat().get(k).getSunday());    
       records.add(rec3); 
      } 
     } 
    } 
    return records; 
} 
相關問題