public interface Stackable<E> extends Iterable<E>{
// access: isEmpty
// if any elemetns exist, or not: false: true
public boolean isEmpty();
// access: push
// insert a elements to last of stack
public void push(E element);
//access: pop
// get a elements from last with delet
public E pop();
// access: top
// get a eleements from last without delet
public E top() ;
}
import java.util.Arrays;
import java.util.Iterator;
public class ArrayStack<E> implements Stackable<E> {
private E[] elements;
private int index = 0;
// default constructor
@SuppressWarnings("unchecked")
public ArrayStack() {
this.elements = (E[]) new Object[10];
}
// constructor copy
public ArrayStack(ArrayStack<E> stack) {
this.elements = stack.elements.clone();
}
// access: isEmpty
// if any elemetns exist, or not: true, false
@Override
public boolean isEmpty() {
return this.index == 0 ? true : false;
}
// access: push
// insert a elements to last of stack
@Override
public void push(E element) {
this.elements[index++] = element;
}
// access: pop
// get a elements from last or stack with delet
@Override
public E pop() {
return this.elements[--index];
}
// access: top
// get a eleements from last
@Override
public E top() {
return this.elements[index];
}
@Override
public Iterator<E> iterator() {
// return Arrays.stream(elements).iterator();
return Arrays.stream(elements).filter(x -> x != null).iterator();
}
}
public class Main {
public static void main(String[] args) {
Stackable<String> stack = new ArrayStack<>();
stack.push("1");
stack.push("2");
stack.push("3");
for (String string : stack) {
System.out.println(string);
}
}
}
출력:
1
2
3