泛型

泛型接口

public interface MinStackContract<Item extends Comparable> {
    public boolean isEmpty();
    public int size();
    public Item pop();
    public Item min();
    public void push(Item item);
}

实现栈需要能够返回最小值,且为O(1),也就意味着,栈中存储的元素必须是可以比较的,因此设计了这个接口,约束其中的类型。替代Comparable的可以是一个接口或者是一个类,这里不能使用implements关键字。

泛型接口实现

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;
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 引言:泛型一直是困扰自己的一个难题,但是泛型有时一个面试时老生常谈的问题;今天作者就通过查阅相关资料简单谈谈自己对...
    cp_insist阅读 1,865评论 0 4
  • object 变量可指向任何类的实例,这让你能够创建可对任何数据类型进程处理的类。然而,这种方法存在几个严重的问题...
    CarlDonitz阅读 935评论 0 5
  • 本章将会介绍 泛型所解决的问题泛型函数类型参数命名类型参数泛型类型扩展一个泛型类型类型约束关联类型泛型 Where...
    寒桥阅读 655评论 0 2
  • ​— 01 — 恋爱中的两个人该有自由吗?我觉得一定要有,因为爱情需要新鲜感也需要距离感,而这些都是通过个人的自由...
    夕言细语阅读 2,066评论 8 28
  • 婴儿湿疹英文称 infantileeczema是一种常见的、由内外因素引起的一种过敏性皮肤炎症。皮损以丘疱疹为主的...
    北京各种病历讲解与预防阅读 283评论 0 0