2013-04-17 3 views
0

У меня есть Class1 с частным атрибутом TreeMap<Long, List<Class2>> tree; и другими, я хочу написать конструктор Class1(Class1 copyOfClass1). Должен ли я автоматически создавать значения ListTreeMap (например, в цикле) или использовать this.tree=new TreeMap(copyOfClass1.tree)?Конструктор TreeMap значений List

+0

Вы хотите получить глубокую копию или мелкую копию? –

+0

Мне нужна глубокая копия. – aLogic

ответ

1

Если вы используете this.tree=new TreeMap(copyOfClass1.tree) это будет эквивалентно, как

this.tree=new TreeMap(); 
this.tree.putAll(copyOfClass1.tree) 

Однако, это не будет делать копию списка, которые хранятся в карте. Клавиши будут указывать на одни и те же списки.

Если вы этого не хотите, я предлагаю перебирать записи и делать копии списков.

this.tree = new TreeMap<Long, List<Class2>>(); 
    for (Entry<Long, List<Class2>> entry : copyOfClass1.tree.entrySet()) { 
     this.tree.put(entry.getKey(), new ArrayList<Class2>(entry.getValue())); 
    } 
+0

И если вместо List я использую другой класс, который я создал, мне нужно сделать то же самое? Я имею в виду, что только примитивные типы копируются по значению? – aLogic

+0

Да, вам нужно сделать то же самое. О «copy by value»: «Java всегда передается по значению. Трудным может быть понимание того, что Java передает объекты в качестве ссылок, переданных по значению». http://stackoverflow.com/questions/40480/is-java-pass-by-reference –

Смежные вопросы