Collections.copy (dest, src) по-прежнему ссылается на коллекцию источников - PullRequest
1 голос
/ 26 января 2011

Я искал форум для обработки глубокого копирования коллекций, но в моих руках 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;
            }
        }
    }

Спасибо,

Chris

1 Ответ

1 голос
/ 26 января 2011

Collections.copy() не выполняет (и не претендует на это) глубокое копирование:

Копирует все элементы из одного списка в другой. После операции индекс каждого скопированного элемента в списке адресатов будет идентичен его индексу в исходном списке. Список адресатов должен быть не меньше длины исходного списка. Если он длиннее, остальные элементы в списке адресатов остаются без изменений.

Это просто делает поверхностную копию (в результате копируются ссылки в каждом списке на один и тот же набор объектов).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...