我对将对象分配给具有几乎相同对象的数组列表有疑问,这些对象来自另一个列表,我想将其添加到数组列表中两次,在将其添加到另一个列表之前,我需要在这些对象中设置一个变量的值。
这是代码,
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) 返回对同一对象的引用,因此返回此行为。如果希望索引不同,则可能需要克隆对象并将其再次添加到列表中。您需要考虑这一点,并决定是否需要该对象的另一个副本。