I have a stack A and I want to create a stack B that is identical to stack A. I don\'t want stack B to simply be a pointer to A -- I actually want to create a new stack B th
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 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());
}
}
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 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);
}
}
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
and suppress the warning with @SuppressWarnings("unchecked")
.