Reputation: 216
I have two object of arraylist having same type. Want to copy the data of one to an other by mading necessary changes. But this changes effect both of my objects. following is the code.
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;
}
Upvotes: 0
Views: 103
Reputation: 216
I solve it by passing custom object in constructor. in above code i was assign the references to other object, due to that both pointed at same location. Following code will help you people.
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;
}
Upvotes: 0
Reputation: 10009
In Java, when you say Object o1= o2;
thats mean that you are trying to make a new object called o1
that has the same address of o2
. SO , you actually have only one object created and two reference on it. Modifying this object will reflect on the object itself and accessing it from any of the object addresses will result the same.
You need to use the concept of Deep Copy
by doing the copy manually with the real value not the references as this Article to understand it
Upvotes: 1