Just use the clone() -method of the Stack-class (it implements Cloneable).
Here's a simple test-case with JUnit:
@Test
public void test()
{
Stack<Integer> intStack = new Stack<Integer>();
for(int i = 0; i < 100; i++)
{
intStack.push(i);
}
Stack<Integer> copiedStack = (Stack<Integer>)intStack.clone();
for(int i = 0; i < 100; i++)
{
Assert.assertEquals(intStack.pop(), copiedStack.pop());
}
}
Edit:
tmsimont: This creates a "unchecked or unsafe operations" warning for me. Any
way to do this without generating this problem?
I at first responded that the warning would be unavoidable, but actually it is avoidable using <?>
(wildcard) -typing:
@Test
public void test()
{
Stack<Integer> intStack = new Stack<Integer>();
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);
}
}
Basically I'd say you're still doing an unchecked cast from ?
(unknown type) to Integer
, but there's no warning. Personally, I'd still prefer to cast directly into Stack<Integer>
and suppress the warning with @SuppressWarnings("unchecked")
.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…