Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >猫狗队列

猫狗队列

作者头像
HelloVass
发布于 2018-09-12 02:29:19
发布于 2018-09-12 02:29:19
67700
代码可运行
举报
文章被收录于专栏:Hellovass 的博客Hellovass 的博客
运行总次数:0
代码可运行

题目

实现一个猫狗队列

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制

// 宠物类
public class Pet {

    private String mType;

    public Pet(String type) {
        mType = type;
    }

    public String getType() {
        return mType;
    }
}

// 狗
public class Dog extends Pet {

    public Dog(String type) {
        super(type);
    }
}

// 喵
public class Cat extends Pet {

    public Cat(String type) {
        super(type);
    }
}

实现一种猫狗队列的结构,要求:

  • add 方法将 cat 或者 dog 放入到队列中
  • pollAll 方法将队列中所有的实例按照入队的先后顺序依次弹出
  • pollCat 方法将队列中的 cat 按照入队先后顺序依次弹出
  • pollDog 方法将队列中的 dog 按照入队先后顺序依次弹出
  • isEmpty 方法检查队列中是否还有 dog 或者 cat 的实例
  • isCatQueueEmpty 方法检查 cat 队列是否还有 cat
  • isDogQueueEmpty 方法检查 dog 队列是否还有 dog

实现

使用组合,增加一个时间戳的字段

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制

public class PetWithTimestamp {

    private Pet mPet;

    private long mTimestamp;

    public PetWithTimestamp(Pet pet, long timestamp) {
        mPet = pet;
        mTimestamp = timestamp;
    }

    public Pet getPet() {
        return mPet;
    }

    public long getTimestamp() {
        return mTimestamp;
    }

    public String getType() {
        return mPet.getType();
    }
}

CatDogQueue 类设计

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制

public class CatDogQueue {

    private Queue<PetWithTimestamp> mCatQueue;

    private Queue<PetWithTimestamp> mDogQueue;


    public CatDogQueue() {
        mCatQueue = new LinkedList<>();
        mDogQueue = new LinkedList<>();
    }

    public void add(Pet pet) {

        if (pet == null) {
            throw new IllegalArgumentException("pet can't be null");
        }

        switch (pet.getType()) {

            case "cat":
                mCatQueue.add(new PetWithTimestamp(pet, System.currentTimeMillis()));
                break;

            case "dog":
                mDogQueue.add(new PetWithTimestamp(pet, System.currentTimeMillis()));
                break;

            default:
                break;
        }
    }

    public Pet pollAll() {

        if (!mCatQueue.isEmpty() && !mDogQueue.isEmpty()) {

            if (mCatQueue.peek().getTimestamp() < mDogQueue.peek().getTimestamp()) {
                return mCatQueue.poll().getPet();
            } else {
                return mDogQueue.poll().getPet();
            }

        } else if (!mCatQueue.isEmpty()) {

            return mCatQueue.poll().getPet();

        } else if (!mDogQueue.isEmpty()) {

            return mDogQueue.poll().getPet();

        } else {
            throw new IllegalStateException("queue is empty!");
        }
    }

    public Cat pollCat() {
        if (!mCatQueue.isEmpty()) {
            return (Cat) mCatQueue.poll().getPet();
        } else {
            throw new IllegalStateException("dog queue is empty!");
        }
    }

    public Dog pollDog() {
        if (!mDogQueue.isEmpty()) {
            return (Dog) mDogQueue.poll().getPet();
        } else {
            throw new IllegalStateException("dog queue is empty!");
        }
    }
    
    public boolean isEmpty() {
        return mCatQueue.isEmpty() && mCatQueue.isEmpty();
    }

    public boolean isCatQueueEmpty() {
        return mCatQueue.isEmpty();
    }

    public boolean isDogQueueEmpty() {
        return mDogQueue.isEmpty();
    }

}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2016-11-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
猫狗队列
实现一种狗猫队列的结构,要求如下: 用户可以调用add方法将cat类或dog类的实例放入队列中; 用户可以调用pollAll方法,将队列中所有的实例按照进队列 的先后顺序依次弹出; 用户可以调用pollDog方法,将队列中dog类的实例按照 进队列的先后顺序依次弹出; 用户可以调用pollCat方法,将队列中cat类的实 例按照进队列的先后顺序依次弹出; 用户可以调用isEmpty方法,检查队列中是 否还有dog或cat的实例; 用户可以调用isDogEmpty方法,检查队列中是否有dog 类的实例; 用户可以调用isCatEmpty方法,检查队列中是否有cat类的实例。
名字是乱打的
2022/05/13
3340
左程云算法一星难度题目刷题(1)
一.栈 1.getmin栈 class MyStack{     public MyStack(Stack<Integer> stackData, Stack<Integer> stackMin) {         this.stackData = stackData;         this.stackMin = stackMin;     }     private Stack<Integer> stackData; //存所有值的     private Stack<Integer> stac
盒光曈辰
2021/11/27
3940
Java中队列(Queue)用法
队列(Queue)是一种特殊类型的集合,它遵循先进先出(FIFO - First In First Out)原则,这意味着第一个添加到队列的元素将是第一个被移除的元素。
王也518
2024/04/25
2410
栈和队列的相关问题
 队列可能稍微有点复杂,定义队列的时候需要定义三个变量,分别是end,start,size,先说说他们分别的作用,每次用户拿队中的元素,都从start下标位置取,每次进队都从s=end位置进,每次出队或者进队size都要++或--  假设数组长度是3,如果size没有到3,进队时就把元素放到end的位置上,这是end和size之间的约束关系;如果size不等于0,出队时就总出start位置,这是start和size之间的约束关系。end本身还有一个约束关系,end是控制进队的,所以每次进一个元素end就++,如果end==数组长度,那么end就回到开头也就是0位置
mathor
2018/08/17
7250
栈和队列的相关问题
基于数组的有界阻塞队列 —— ArrayBlockingQueue
" 在阅读完和 AQS 相关的锁以及同步辅助器之后,来一起阅读 JUC 下的和队列相关的源码。先从第一个开始:ArrayBlockingQueue。 "
程序员小航
2020/11/23
9380
基于数组的有界阻塞队列 —— ArrayBlockingQueue
两个栈实现队列以及两个队列实现栈
两个队列实现栈 思路:队列queue是专职进出栈的,队列help只是个中转站,起辅助作用。 入栈:直接入队列queue即可 出栈:把queue的除最后一个元素外全部转移到队help中,然后把刚才剩下queue中的那个元素出队列。之后把q2中的全部元素转移回q1中(或者两个队列互换) 入栈:
用户5513909
2023/04/25
2580
两个栈实现队列以及两个队列实现栈
由两个栈组成的队列
栈的特点是先进后出,队列的特点是先进先出,使用两个栈正好能把顺序反过来实现类似队列的操作。
HelloVass
2018/09/12
4680
栈和队列中的算法题
编写一个类,用两个栈实现队列,支持队列的基本操作(add, poll, peek)
归思君
2023/10/16
1900
数据结构与算法(2)——栈和队列栈队列LeetCode 相关题目整理其他题目整理
栈是一种用于存储数据的简单数据结构(与链表类似)。数据入栈的次序是栈的关键。可以把一桶桶装的薯片看作是一个栈的例子,当薯片做好之后,它们会依次被添加到桶里,每一片都会是当前的最上面一片,而每次我们取的时候也是取的最上面的那一片,规定你不能破坏桶也不能把底部捅穿,所以第一个放入桶的薯片只能最后一个从桶里取出;
我没有三颗心脏
2018/07/24
1.3K0
栈和队列深入浅出
1. 概念: 栈一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈 顶,另一端称为栈底。栈中的数据元素遵守先进后出的原则。
用户11305962
2024/10/09
1250
栈和队列深入浅出
基于链表的有界阻塞队列 —— LinkedBlockingQueue
" 上一节看了基于数据的有界阻塞队列 ArrayBlockingQueue 的源码,通过阅读源码了解到在 ArrayBlockingQueue 中入队列和出队列操作都是用了 ReentrantLock 来保证线程安全。下面咱们看另一种有界阻塞队列:LinkedBlockingQueue。 "
程序员小航
2020/11/23
6200
基于链表的有界阻塞队列 —— LinkedBlockingQueue
《Java初阶数据结构》----4.<线性表---Stack栈和Queue队列>
用户11288958
2024/09/24
950
《Java初阶数据结构》----4.<线性表---Stack栈和Queue队列>
【数据结构与算法-初学者指南】【附带力扣原题】队列
在计算机科学中,队列是一种常见的数据结构,它可以用于多种场景,例如任务调度、事件处理等。本篇博客将介绍队列的基本原理和常见操作,并探讨如何使用数组模拟队列的操作以及该方法的优缺点及性能影响。最后,我们将针对基于数组的队列算法题目提供解题思路和优化方法的讨论。
苏泽
2024/03/01
1720
数据结构-4.栈与队列
栈: 一种特殊的线性表, 只许在固定的一端进行插入和删除元素操作. 进行数据插入和删除操作的一端称为栈顶, 另一端称为栈底. 栈中的数据元素遵守后进先出的原则.
用户11369350
2024/11/19
610
数据结构-4.栈与队列
两个队列实现栈结构
实现思路: 一个存放我们数据的栈,每次我们添数据时候把数据放到我们这个data队列中 一个help队列,每次我们data队列出数据时候,将前面的数据都复制导入我们help队列,留最后一个数据弹出.最后交换引用,让help队列成为新的data队列,让空的data队列成为新的help队列
名字是乱打的
2022/05/13
3650
两个队列实现栈结构
队列及其经典面试题
由于出队操作只能在队列的头部进行,若采用数组的方案,每次出队一个元素就得搬移剩下的所有元素向前移动一个单位。
VIBE
2022/12/02
3110
【Java】栈和队列详解!!!
细心的同学观察图片和表格中的方法会发现,图片中并没有size方法,是因为Stack继承于Vector,他使用的size方法是Vector中的方法;
喜欢做梦
2024/11/25
6430
【Java】栈和队列详解!!!
Java对阻塞队列的实现ArrayBlockingQueueLinkedBlockingQueue
什么是阻塞队列? 阻塞队列与队列基本一致,额外的支持阻塞添加和阻塞删除方法. 阻塞添加: 当队列满时,线程不断尝试向其中添加,直到有其他线程取走元素,使添加操作成功,在此期间,线程阻塞. 阻塞删除:
呼延十
2019/07/01
7540
Java对阻塞队列的实现ArrayBlockingQueueLinkedBlockingQueue
【Java-数据结构篇】Java 中栈和队列:构建程序逻辑的关键数据结构基石
2.1 使用内置的 Stack 类 2.1.1 Stack 类的基本方法与操作示例
学无止尽5
2025/05/31
1600
【Java-数据结构篇】Java 中栈和队列:构建程序逻辑的关键数据结构基石
Java的栈与队列以及代码实现
栈是常见的线性数据结构,栈的特点是以先进后出的形式,后进先出,先进后出,分为栈底和栈顶 栈应用于内存的分配,表达式求值,存储临时的数据和方法的调用等。 例如这把枪,第一发子弹是最后发射的,第一发子弹在栈底,而最新安装上去的子弹在栈的顶部,只有将上面的子弹打完(栈顶的数据走完),最后一发子弹才会射出
如烟花般绚烂却又稍纵即逝
2024/11/26
1650
Java的栈与队列以及代码实现
推荐阅读
相关推荐
猫狗队列
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验