Java 如何使用arraylist作为字段有效地深度克隆对象数组
最深层要素:Java 如何使用arraylist作为字段有效地深度克隆对象数组,java,arrays,arraylist,clone,deep-copy,Java,Arrays,Arraylist,Clone,Deep Copy,最深层要素: class Player { //fields contain: int value; } 收集于: class Team { //fields contain: ArrayList<Player> players; } class Splitter { //fields contain: Teams[] teams; } 在拆分器中的函数中我必须克隆团队。我基本上必须克隆每个Team对象来克隆数组teams,每个对
class Player {
//fields contain:
int value;
}
收集于:
class Team {
//fields contain:
ArrayList<Player> players;
}
class Splitter {
//fields contain:
Teams[] teams;
}
在拆分器中的函数中
我必须克隆团队
。我基本上必须克隆每个Team
对象来克隆数组teams
,每个对象都包含一个我必须克隆的数组列表players
。我不想克隆播放器对象本身
到目前为止,我的解决方案如下所示:
private Team[] deepClone(Team[] teams) {
Team[] new_teams = new Team[teams.length];
for (int i = 0; i < teams.length; i++) {
new_teams[i] = new Team();
for (Player player : teams[i].getPlayers())
new_teams[i].getPlayers().add(player);
}
return new_teams;
}
private Team[]deepClone(Team[]teams){
团队[]新团队=新团队[团队.长度];
for(int i=0;i
我可以做些什么来提高效率或使其更优雅?您当前的解决方案相当于这种更简单的形式:
private Team[] deepClone(Team[] teams) {
Team[] new_teams = new Team[teams.length];
for (int i = 0; i < teams.length; i++) {
new_teams[i] = new Team();
new_teams[i].getPlayers().addAll(teams[i].getPlayers());
}
return new_teams;
}
您当前的解决方案相当于以下更简单的形式:
private Team[] deepClone(Team[] teams) {
Team[] new_teams = new Team[teams.length];
for (int i = 0; i < teams.length; i++) {
new_teams[i] = new Team();
new_teams[i].getPlayers().addAll(teams[i].getPlayers());
}
return new_teams;
}
理想情况下,若你们想做完美的深度克隆,你们也应该克隆玩家。我们应该在每个类中编写克隆方法,然后调用那个克隆方法来获得克隆,不管怎样,你们可以按照下面的方法
class Team {
//fields contain:
ArrayList<Player> players;
public Team clone() {
Team team = new Team();
team.players.addAll(players);
return team;
}
}
// ...
Team[] deepCloneTeams(Team[] teams) {
Team[] newTeams = new Team[teams.length];
for (int i = 0; i < teams.length; i++)
newTeams[i] = teams[i].clone();
return newTeams;
}
班级团队{
//字段包含:
ArrayList玩家;
公共团队克隆(){
团队=新团队();
team.players.addAll(玩家);
返回队;
}
}
// ...
团队[]深克隆团队(团队[]团队){
团队[]新团队=新团队[teams.length];
for(int i=0;i
理想情况下,你应该克隆玩家。如果你想做完美的深度克隆,我们应该在每个类中都编写克隆方法,然后调用克隆方法来获得克隆,不管怎样,你都可以按照下面的方法
class Team {
//fields contain:
ArrayList<Player> players;
public Team clone() {
Team team = new Team();
team.players.addAll(players);
return team;
}
}
// ...
Team[] deepCloneTeams(Team[] teams) {
Team[] newTeams = new Team[teams.length];
for (int i = 0; i < teams.length; i++)
newTeams[i] = teams[i].clone();
return newTeams;
}
班级团队{
//字段包含:
ArrayList玩家;
公共团队克隆(){
团队=新团队();
team.players.addAll(玩家);
返回队;
}
}
// ...
团队[]深克隆团队(团队[]团队){
团队[]新团队=新团队[teams.length];
for(int i=0;i
老实说,这看起来并不难看!你是县长;-)你有java-8吗?.getPlayers().addAll(teams[i].getPlayers())
可以为你保存嵌套的,
老实说,这看起来并不难看!你是县长;-)你有java-8吗?.getPlayers().addAll(teams[i].getPlayers())
可以为