如何将对象从列表移动到另一个列表两次并以不同的方式设置对象变量



我对将对象分配给具有几乎相同对象的数组列表有疑问,这些对象来自另一个列表,我想将其添加到数组列表中两次,在将其添加到另一个列表之前,我需要在这些对象中设置一个变量的值。

这是代码,

ArrayList<ClassCourse> courses = new ArrayList<ClassCourse>();
ArrayList<ClassCourse> _courses = new ArrayList<ClassCourse>();
int index = 0;
for( int i = 0; i < courses.size(); i++ )
{
    ClassCourse t = courses.get(i);
    if(t.getSks()==4)      
    {
        i--;
        t.setSks(2);
        t.setIndex(index); // I want to set this one
        index++;
    }
    else
    {
        t.setIndex(index); // I want to set this one
        index++;
    }
    _courses.add(t);
}

问题是当我通过打印来检查列表时

for( ClassCourse t : _courses )
    System.out.println( t.getIndex() + " " + t.getName() + " " +
            t.getCourseCode() + " " + t.getSks() );

这就是我得到的

1 Visi Komputer A 21 Visi Komputer A 22 马特玛蒂卡迪克里特 C 34 贾林甘·尼尔卡贝尔·丹·孔普塔西·贝尔格拉克 A 24 贾林甘·尼尔卡贝尔·丹·孔普塔西·贝尔格拉克 A 25 Pemograman Framework .NET A 36 Perancangan dan Analisis Algoritma E 38 系统特迪斯里布西 A 28 系统特迪斯里布西 A 29 马特玛蒂卡迪克语D 311 Manajemen Proyek Perangkat Lunak A 211 Manajemen Proyek Perangkat Lunak A 2

我无法以正确的方式增加索引的价值

 if(t.getSks()==4)      
{
    i--;
    t.setSks(2);
    t.setIndex(index); // I want to set this one
    index++;
}

我猜您正在递减 i,以便将对象添加两次。但请记住,它是添加到列表中的同一对象。因此,当您设置 t.setIndex(index) 时,它将更改上一次迭代的索引值。这是因为 java 只处理引用。因此,courses.get(0) 和 courses.get(1) 返回对同一对象的引用,因此返回此行为。如果希望索引不同,则可能需要克隆对象并将其再次添加到列表中。您需要考虑这一点,并决定是否需要该对象的另一个副本。

最新更新