Java - как скопировать объект коллекции перед передачей модификации? - PullRequest
1 голос
/ 29 декабря 2011

Я немного новичок в Java и ее концепции передачи по значению, и я все еще прихожу к соглашению с ней.У меня есть следующий код и вопросы относительно этого кода.

Вопрос: 1) Будет ли мой текущий код делать глубокую копию?или мне также придется сделать глубокую копию для класса A?

Вопрос: 2) будет ли глубокая копия предотвращать изменения в моем para1, которые я передаю классам?

Спасибо зазаранее за вашу помощь.

С уважением, Атул.

public class A {
   private Double value;
}

public class I {
private Hashtable<Long, A> f2 = null;        

    I(I oldI){
        f2 = new Hastable<Long, A>(oldI);
    }
}

public class k {

private HashMap<Long, I > ob1 = null;


private HashMap<Long, I> ob2 = null; 

    k(Vector<I> para1){
    ob1 = new HashMap<Long, I >();
    for(int i=0; i < para1.size(); i++){
                    /* Question: 1  */
        ob1.put((long) i, new I(para1.get(i)));
    }
    }
}

Ответы [ 3 ]

2 голосов
/ 29 декабря 2011

1.) Нет, ваш текущий код не дает вам глубокую копию. И если вы хотите сделать глубокую копию, вам также придется клонировать сложные внутренние классы.

2.) Да, глубокая копия предотвратит изменения объекта 1, если вы внесете изменения в объект 2, даже если объект 2 является клоном объекта 1.

http://www.javaworld.com/javaworld/javatips/jw-javatip76.html

1 голос
/ 29 декабря 2011

Если цель состоит в том, чтобы предотвратить изменение, может помочь один или несколько «немодифицируемых» методов, таких как unmodifiableMap в java.util.Collections.

0 голосов
/ 29 декабря 2011

В Google Guava есть несколько неизменных коллекций, которые являются реальными копиями, а не представлениями оригинала.

Некоторое хорошее знакомство с этим недавно появилось в Интернете: http://marxsoftware.blogspot.com/2011/10/immutable-collections-guava-style.html

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