2013-03-26 3 views
0

Существует следующая структура данных:Добавить новый экземпляр класса вектора

Vector<Cluster> clustersList; 

В ходе итерационного процесса я добавлять новые элементы в clustersList.

Cluster c1 = getCluster(); 
clustersList.add(c1); 

Проблема заключается в том, что на последней итерации первый элемент (((0)(2))) заменяется последним ((((0)(2))((1)(6)))), то есть:

[((0)(2))] 
[((0)(2)), ((1)(6))] 
[((0)(2)), ((1)(6)), ((3)(7))] 
[((0)(2)), ((1)(6)), ((3)(7)), ((5)(8))] 
[(((0)(2))((1)(6))), ((1)(6)), ((3)(7)), ((5)(8)), (((0)(2))((1)(6)))] 

Результат должен быть:

[((0)(2))] 
[((0)(2)), ((1)(6))] 
[((0)(2)), ((1)(6)), ((3)(7))] 
[((0)(2)), ((1)(6)), ((3)(7)), ((5)(8))] 
[((0)(2)), ((1)(6)), ((3)(7)), ((5)(8)), (((0)(2))((1)(6)))] 

Как я могу получить такой результат?

P.S. Я не использую идентификатор внутри кластера классов.

+0

Вектор содержит только ссылку на объекты кластера, он не содержит фактического объекта. Так что, если где-то еще объект изменен, вы можете в конечном итоге справиться с этой ситуацией – gerrytan

+0

@gerrytan: Итак, лучше ли использовать ArrayList в этом случае? –

ответ

1

Первый кластер - это некоторый объект (от new Cluster()), содержимое которого перезаписывается значением последнего элемента.

У вас не было бы этой концептуальной проблемы, если бы класс был неизменным, как String. Решение (на данный момент) было бы добавить в каком-либо месте (ах) a new Cluster().

P.S.

Использование List<Cluster> clusterList = new ArrayList<>(); - более новые классы, немного быстрее.

+0

Спасибо, это помогло решить проблему. –

Смежные вопросы