java - Android 中指向相同对象或数据的 ArrayList

标签 java android arraylist copyonwritearraylist

我有两个具有相同类型的 arraylist 对象。想要通过进行必要的更改将一个数据复制到另一个。但这种变化会影响我的两个对象。以下是代码。

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;

}

最佳答案

在 Java 中,当您说 Object o1= o2; 时,这意味着您正在尝试创建一个名为 o1 的新对象,该对象具有与 相同的地址o2SO ,您实际上只创建了一个对象并对其进行了两个引用。修改此对象将反射(reflect)在对象本身上,从任何对象地址访问它都会得到相同的结果。

您需要使用深度复制的概念,通过使用实际值而不是引用手动进行复制,如Article去理解它

关于java - Android 中指向相同对象或数据的 ArrayList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22198110/

相关文章:

java - 在 URL 中附加特殊字符

android - 没有标题和边框的自定义对话框

java - ArrayList 无法使用 (String[])list.toArray() 转换为字符串数组。为什么?

java - 从 Firebase 检索值并显示在 EditText 中

Java 使用 arraylist 的迭代器如何获取索引

java - 如何以正确的方式对 "Export"进行编码?

java - JSR-303 : after adding a constraint violation, constraint violations set中出现额外的空一个

java - 尽管使用 c3p0 仍出现 `Could not open connection` 问题

android - 我必须如何设置可以在 Android OpenGL-ES 2.0 fragment 着色器中使用它们的纹理?

java - Android - 引用 DialogInterface.OnClickListener 中的主要可运行对象