我有问题是将对象分配给具有几乎相同对象的arraylist,对象来自另一个列表,我想将其添加到arraylist两次,在我将其添加到另一个列表之前,我需要将值设置为那些对象。
这个代码,
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 2 1 Visi Komputer A 2 2 Matematika Diskrit C 3 4 Jaringan Nirkabel dan Komputasi Bergerak A 2 4 Jaringan Nirkabel dan Komputasi Bergerak A 2 5 Pemograman Framework .NET A 3 6 Perancangan dan Analisis Algoritma E 3 8 Sistem Terdistribusi A 2 8 Sistem Terdistribusi A 2 9 Matematika Diskrit D 3 11 Manajemen Proyek Perangkat Lunak A 2 11 Manajemen Proyek Perangkat Lunak A 2
我无法正确地增加索引值
答案 0 :(得分:1)
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)返回对同一对象的引用,因此返回此行为。 如果您希望索引不同,则可能需要克隆该对象并将其再次添加到列表中。您需要通过这个思考并决定是否需要该对象的另一个副本。