package com.kartik.tutorials;
import java.util.Arrays;
public class MyStackArray<E> {
private int size
= 0;
private static final
int DEFAULT_CAPACITY = 10;
private Object
elements[];
public
MyStackArray() {
elements = new
Object[DEFAULT_CAPACITY];
}
public void push(E e) {
if (size ==
elements.length) {
ensureCapa();
}
elements[size++] = e;
}
@SuppressWarnings("unchecked")
public E pop() {
E e = (E)
elements[--size];
elements[size]
= null;
return e;
}
private void
ensureCapa() {
int newSize =
elements.length * 2;
elements =
Arrays.copyOf(elements, newSize);
}
}
package com.kartik.tutorials;
import java.util.ArrayList;
public class MyStackList<E> extends
ArrayList<E> {
private static final
long serialVersionUID = 1L;
public E pop() {
E e =
get(size() - 1);
remove(size() -
1);
return e;
}
public void
push(E e) {
add(e);
}
}
This is a small JUnit test for the data structure.
package com.kartik.tutorials;
import static org.junit.Assert.assertTrue;
import org.junit.Before;
import org.junit.Test;
public class MyStackTest {
@Before
public void
setUp() throws Exception {
}
@Test
public void
testStackArray() {
MyStackArray<Integer> stack = new MyStackArray<Integer>();
stack.push(1);
stack.push(2);
stack.push(3);
stack.push(3);
stack.push(4);
assertTrue(4 ==
stack.pop());
assertTrue(3 ==
stack.pop());
assertTrue(3 ==
stack.pop());
assertTrue(2 ==
stack.pop());
assertTrue(1 ==
stack.pop());
}
@Test
public void
testStackList() {
MyStackList<Integer> stack = new MyStackList<Integer>();
stack.push(1);
stack.push(2);
stack.push(3);
stack.push(3);
stack.push(4);
assertTrue(4 ==
stack.pop());
assertTrue(3 == stack.pop());
assertTrue(3 ==
stack.pop());
assertTrue(2 ==
stack.pop());
assertTrue(1 ==
stack.pop());
}
}