2013-03-26 63 views
0

有以下數據結構:一個新的類實例添加到Vector

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.我不在類Cluster中使用任何ID。

+0

Vector只保存對簇對象的引用,它不包含實際的對象。因此,如果在其他地方修改了對象,那麼最終會出現這種情況 – gerrytan 2013-03-26 13:59:48

+0

@gerrytan:那麼,在這種情況下使用ArrayList會更好嗎? – 2013-03-26 14:00:42

回答

1

第一個羣集是某個對象(來自new Cluster()),其內容被最後一個元素的值覆蓋。

如果類不可變,就不會像String那樣產生這個概念上的問題。解決方案(現在)將在某個地方添加一個new Cluster()

P.S.使用List<Cluster> clusterList = new ArrayList<>(); - 更新的類,更快一點。

+0

謝謝,這有助於解決問題。 – 2013-03-26 14:09:03