2011-01-25 66 views
1

我已经搜索论坛处理集合的深度复制,但在我的手中Collections.copy(dest,src)未按预期工作。我错过了什么?Collections.copy(dest,src)仍然参考源集合

List<Column> mergedStudies = new ArrayList<Column>(Arrays.asList(new Column[studyColumns.size()])); 
    Collections.copy(mergedStudies, studyColumns); 

    for (Iterator itrStudyRecColumns = mergedStudies.iterator(); itrStudyRecColumns.hasNext();) { 
     Column studyRecCol = (Column) itrStudyRecColumns.next(); 
     for (Iterator itrStudyValColumns = studyValueColumns.iterator(); itrStudyValColumns.hasNext();) { 
      Column studyValCol = (Column) itrStudyValColumns.next(); 
      if (studyRecCol.getColumnName().equals(studyValCol.getColumnName())) { 
       // Note: this method dereferences copies to an existing destination collection WITH items appended to end of collection. 
       CellValue[] cellValArray = studyValCol.getCellValues().toArray(new CellValue[studyValCol.getCellValues().size()]); 
       studyRecCol.getCellValues().addAll(new ArrayList<CellValue>(Arrays.asList(cellValArray))); 
       break; 
      } 
     } 
    } 

感谢,

克里斯

+0

Column是否实现Cloneable接口? – helpermethod 2011-01-25 22:16:38

回答

1

Collections.copy()没有(也不声称)进行了深刻的副本:

副本的所有元素从一个列表到另一个。操作之后,目标列表中每个复制元素的索引将与源列表中的索引相同。目的地列表必须至少与源列表一样长。如果它更长,目标列表中的其余元素不受影响。

它只是做一个浅拷贝(导致在每个列表中复制对同一组对象的引用)。

+0

那么是否有一个支持深度拷贝的Collection接口(或其他)? – Chris 2011-01-26 15:19:06