2013-04-12 60 views
0

我正在使用這些指令進行方法: 構造函數public ProgrammingTeam(ProgrammingTeam p),它以編程隊列p作爲參數並構造p的深層副本。不要只寫符合= p.meets ;.爲了使一個深拷貝,你必須調用ArrayList中的拷貝構造函數:符合=新的ArrayList ();.在Java中使用構造函數進行深度複製

public ProgrammingTeam(ProgrammingTeam p) { 
    teamName = p.teamName; 
    teamMembers = new String [ p.teamMembers.length ]; 
    for (int i = p.teamMembers.length - 1; i >= 0; i--) { 

    } 
    meets = new ArrayList <Competition>(); 
} 

我想不出我究竟應該如何編寫,然後完成深拷貝。我知道這將需要一個for循環來實際複製每個對象,但我很茫然,謝謝!

回答

0

您需要創建所有的ProgrammingTeam參數P的屬性的深層副本。

你可以做到以下幾點:

for(int i = 0; i < p.teamMembers.length -1; i++){ 
     TeamMember teamMember = new TeamMember(); 
     // set attributes 
     teamMember.setAttribute1(p.teamMembers[i].getAttribute1()); 
     ... 
     teamMember.setAttributeN(p.teamMembers[i].getAttributeN()); 
     this.teamMembers[i] = teamMember; 
} 

當然,你可以簡單地創建任何對象在需要進行深拷貝名單舉行了拷貝構造函數。複製構造函數基本上需要完成我在for循環中描述的同樣的事情。

0

爲了使String[] teamMembers使用java.util.Arrays.copyOf(teamMembers, teamMembers.length)

至於List<Competition> meets了深刻的副本,你可以用new ArrayList<Competition>(meets)做深層複製,但是它只會是一件好事,如果競爭是永恆不變的

2

關於String數組.. 。

字符串是不變的,所以它足以使用Arrays.copyOf()實用方法陣列簡單地複製,例如:

teamMembers = Arrays.copyOf(p.teamMembers, p.teamMembers.length); 

至於名單,這取決於...

如果Competitionimmutable,使用ArrayList的拷貝構造函數:

meets = new ArrayList<Competition>(p.meets); 

如果Competition是可變的,你需要調用它的拷貝構造函數(如果需要,定義它)。

meets = new ArrayList<Competition>(); 
for (Competition c : p.meets) { 
    meets.add(new Competition(c)); 
} 
+0

我試過teamMembers建議,但不允許它。可能是因爲實際變量是private String [] teamMembers;? – user2272710

+0

你是什麼意思「沒有允許它」?什麼是錯誤信息? – Bohemian