我在论坛上进行了搜索,以处理集合的深层复制,但是在我手中,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;
            }
        }
    }


谢谢,

克里斯

最佳答案

Collections.copy()不会(也不声称)执行深层复制:


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


它只是进行浅表复制(导致每个列表中复制的引用指向同一组对象)。

关于java - Collections.copy(dest,src)仍引用源集合,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4799377/

10-15 13:12