java 复制stack类_如何使用Java复制堆栈?

小编典典

只需使用Stack类的clone()方法(它实现Cloneable)。

这是一个使用JUnit的简单测试用例:

@Test

public void test()

{

Stack intStack = new Stack();

for(int i = 0; i < 100; i++)

{

intStack.push(i);

}

Stack copiedStack = (Stack)intStack.clone();

for(int i = 0; i < 100; i++)

{

Assert.assertEquals(intStack.pop(), copiedStack.pop());

}

}

编辑:

tmsimont:这会为我创建“未经检查或不安全的操作”警告。有什么办法做到这一点而不会产生此问题?

我最初回答说警告是不可避免的,但实际上使用>(通配符)-typing 是可以避免的:

@Test

public void test()

{

Stack intStack = new Stack();

for(int i = 0; i < 100; i++)

{

intStack.push(i);

}

//No warning

Stack> copiedStack = (Stack>)intStack.clone();

for(int i = 0; i < 100; i++)

{

Integer value = (Integer)copiedStack.pop(); //Won't cause a warning, no matter to which type you cast (String, Float...), but will throw ClassCastException at runtime if the type is wrong

Assert.assertEquals(intStack.pop(), value);

}

}

基本上,我想说的是您仍在从?(未知类型)到进行未经检查的强制转换Integer,但是没有警告。就个人而言,我还是更喜欢直接投射Stack并使用禁止显示警告@SuppressWarnings("unchecked")。

2020-09-23

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值