java - 创建列表深拷贝
问题描述
我正在尝试创建 List 的深层副本,但即使在尝试一切复制原始列表之后,我仍然收到新列表为空的错误 <[]> 。
我不确定我的问题是出在代码的深层复制部分,还是在将元素添加到原始列表时出错了。到目前为止,我所拥有的是:
public class OwnedPiggyBank
{
List<Coin> bank;
private Owner owner;
public OwnedPiggyBank(Owner owner)
{
this.owner = owner;
bank = new ArrayList<>();
}
public void add(List<Coin> coins)
{
bank.addAll(coins);
}
public List<Coin> deepCopy()
{
List<Coin> coins = new ArrayList<>();
for (Coin c : bank)
{
coins.add(new Coin(c));
}
return coins;
}
...与此相关的测试用例是:
public void test()
{
OwnedPiggyBank b = new OwnedPiggyBank("Lola");
List<Coin> coins = new ArrayList<Coin>(Arrays.asList(Coin.PENNY, Coin.LOONIE, Coin.TOONIE));
b.add(coins);
OwnedPiggyBank c = new OwnedPiggyBank(b);
assertEquals(coins, c.deepCopy());
}
解决方案
在你的构造函数public OwnedPiggyBank(Owner owner)
中,你有
bank = new ArrayList<>();
所以当然deepCopy
bank
是empty
assertEquals(coins, b.deepCopy());
更有意义
如果你想保留这个test
案例,那么你需要做一些类似的事情
public OwnedPiggyBank(OwnedPiggyBank owner)
{
this.owner = owner;
bank = owner.deepCopy();
}
推荐阅读
- mongodb - 在 MongoDB 中从 $match、$and 中动态排除字段
- elasticsearch - 在哪个弹性堆栈版本中引入了观察者?
- android - Android:需要下载文件夹 Uri 而不是路径
- html - 如何使用输入类型范围将文本添加到滑块拇指?
- lua - 如果参数是硬编码字符串或包含所述字符串的变量,则 Nmap NSE 脚本函数的行为会有所不同
- input - Snakemake多个输入文件扩展但没有重复
- node.js - 使用需要几秒钟才能完成的自动完成脚本时,Bash 中的 Spinner 功能
- regex - Nginx 位置块和代理通行证的正则表达式
- react-native - 在 tabnavigator 中访问 redux 状态(react-navigation)
- jupyter-notebook - 如何通过命令行重新启动 jupyter hub 中的服务器?