泛型接口
public interface MinStackContract<Item extends Comparable> {
public boolean isEmpty();
public int size();
public Item pop();
public Item min();
public void push(Item item);
}
實現(xiàn)棧需要能夠返回最小值站绪,且為O(1),也就意味著遂鹊,棧中存儲的元素必須是可以比較的振乏,因此設(shè)計了這個接口,約束其中的類型秉扑。替代Comparable的可以是一個接口或者是一個類慧邮,這里不能使用implements關(guān)鍵字。
泛型接口實現(xiàn)
public class MinStack<Item extends Comparable> implements MinStackContract<Item> {
private class Node {
Item item;
Item min;
Node next;
}
private Node top;
private int size = 0;
public boolean isEmpty() {
return top == null;
}
public int size(){
return size;
}
public void push(Item item) {
Node node = new Node();
node.item = item;
node.next = top;
size++;
top = node;
if (size() == 1)
{
top.min = item;
}else {
//如果沒有對泛型使用Comparable約束舟陆,這里直接使用>比較會報錯误澳。
if (top.next.min.compareTo(item) == 1){
top.min = item;
}else {
top.min = top.next.min;
}
}
}
public Item pop() {
if (isEmpty()){
throw new NullPointerException("stack is empty");
}
Item item = top.item;
//刪除棧頂元素
top = top.next;
size--;
return item;
}
public Item min() {
if (isEmpty()){
throw new NullPointerException("stack is empty");
}
return top.min;
}
}