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

时间:2012-04-23 05:30:40

标签: java list arraylist

我有问题是将对象分配给具有几乎相同对象的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

我无法正确地增加索引值

1 个答案:

答案 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)返回对同一对象的引用,因此返回此行为。 如果您希望索引不同,则可能需要克隆该对象并将其再次添加到列表中。您需要通过这个思考并决定是否需要该对象的另一个副本。