Многие коллекции Java реализуют метод add - они на самом деле глубокое копирование - PullRequest
0 голосов
/ 07 февраля 2012

Я просто схватил коллекции и обнаружил, что методы add () на самом деле глубоко копируют объекты в коллекции.Должны ли они называться что-то вроде «copyInto»?

import java.util.*;
class Test {
    public static void main(String[] args) {

        Set <Frog> setOfFrogs = new HashSet <Frog>();

        Frog frog1 = new Frog("Kermit");
        Frog frog2 = new Frog("Bob");

        setOfFrogs.add(frog1);
        setOfFrogs.add(frog2);

        frog1.name = "May";
        frog2.name = "Mary";

        for (Frog eachFrog : setOfFrogs){
            System.out.println(eachFrog.name);
        }
    }
}

Это печатает: «May» и «Mary».

Извините, все это мелкая копия.Мне нужно заполучить этот "справочный" бизнес в мою тупую голову ...

Ответы [ 2 ]

9 голосов
/ 07 февраля 2012

.add(..) просто добавляет ссылку на объект в коллекции. Это не делает глубокое копирование. Например, если вы измените объект, это изменение будет отражено в коллекции.

1 голос
/ 07 февраля 2012

Коллекция работает с объектными ссылками -> вот почему вы не можете добавить примитивы в коллекцию и должны обернуть их в представление объекта.

...