【题目】:

已知有宠物:狗、猫如下,实现一种猫狗队列的结构:

/**

* @ClassName Pet

* @Description 宠物

* @Author Huarray

* @Date 2019/1/10 9:53

* @Version 1.0

**/

public class Pet {

private String type;

public Pet(String type) {

this.type = type;

}

public String getType() {

return this.type;

}

}

/**

* @ClassName Dog

* @Description 狗

* @Author Huarray

* @Date 2019/1/10 14:48

* @Version 1.0

**/

public class Dog extends Pet{

public Dog(){

super("Dog");

}

}

/**

* @ClassName Cat

* @Description 猫

* @Author Huarray

* @Date 2019/1/10 14:55

* @Version 1.0

**/

public class Cat extends Pet {

public Cat(){

super("Cat");

}

}

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

①用户可以调用add方法将cat类或dog类的实例放进队列中;

②用户可以调用pollAll方法, 将队列中所有的实例按照进队列的先后顺序依次弹出;

③用户可以调用pollDog方法,将队列中所有的Dog类的实例按照进队列的先后顺序依次弹出;

④用户可以调用pollCat方法,将队列中所有的Cat类的实例按照进队列的先后顺序依次弹出;

⑤用户可以调用isEmpty方法,检查队列里,是否还有Dog或Cat类的实例;

⑥用户可以调用isDogEmpty方法,检查队列里,是否还有Dog类的实例;

⑦用户可以调用isCatEmpty方法,检查队列里,是否还有Cat类的示例;

针对本题,本文只讲解add和pollAll

思路: 原题中的类是不能进行修改的,所以我们需要设计一个包装类 PetQueue,如下:

这个类有两个特点:1.pet属性,pet属性可以包涵Dog类和Cat类,2.count属性,这个属性是用来记录存入的先后顺序的,方便弹出时做判断

/**

* @ClassName PetQueue

* @Description 宠物扩展类

* @Author Huarray

* @Date 2019/1/10 15:03

* @Version 1.0

**/

public class PetQueue {

private Pet pet;

private Long count;

public PetQueue(Pet pet,Long count){

this.pet = pet;

this.count = count;

}

public Long getCount(){

return this.count;

}

/**

* @Author Huarray

* @Description 获取宠物类型

* @Date 15:15 2019/1/10

* @Param []

* @return java.lang.String

**/

public String petQueueType(){

return this.pet.getType();

}

public Pet getPet(){

return this.pet;

}

}

这个类便是我们最终要操作的,在add()这个方法中使用switch在性能上比if else 要好,速度更快,这里提一点:当你要判断的类型是字符串类型时,switch处理要迅速,但是如果判断是可变参数时就得用if else了,if else 处理起来更灵活。

import java.util.LinkedList;

import java.util.Queue;

/**

* @ClassName DogCatQueue

* @Description 狗猫集合类

* @Author Huarray

* @Date 2019/1/10 14:58

* @Version 1.0

**/

public class DogCatQueue {

private QueuedogQ;

private QueuecatQ;

private Long count;

public DogCatQueue(){

this.dogQ = new LinkedList<>();

this.catQ = new LinkedList<>();

this.count = 0L;

}

public void add(Pet pet){

switch (pet.getType()){

case "Dog":

this.dogQ.add(new PetQueue(pet,count++));

break;

case "Cat":

this.catQ.add(new PetQueue(pet,count++));

break;

default:

System.out.println("没有该类型的宠物");

break;

}

}

public PetQueue pollAll(){

if (!dogQ.isEmpty() || !catQ.isEmpty()){

if(dogQ.isEmpty()){

return catQ.poll();

}

if (catQ.isEmpty()){

return dogQ.poll();

}

if (dogQ.peek().getCount() < catQ.peek().getCount()){

return dogQ.poll();

}else {

return catQ.poll();

}

}

return null;

}

}

看测试类:

/**

* @ClassName Test

* @Description TODO

* @Author Huarray

* @Date 2019/1/10 16:32

* @Version 1.0

**/

public class Test {

public static void main(String[] ages){

DogCatQueue dc = new DogCatQueue();

dc.add(new Dog());

dc.add(new Cat());

dc.add(new Dog());

dc.add(new Dog());

dc.add(new Cat());

dc.add(new Dog());

while (true){

PetQueue petQueue = dc.pollAll();

if (petQueue != null){

System.out.println(petQueue.getPet().getType() + "-" + petQueue.getCount());

}else {

break;

}

}

}

}

结果:

如有疑问,欢迎评论,我们一起学习,一起探讨

JAVA中在某游戏系统有猫狗猪_算法面试题之猫狗队列(java)相关推荐

  1. Java中2.5D游戏的设计与实现(3)—八方走法实现原理及相关代码

    Java中2.5D游戏的设计与实现(3)-八方走法实现原理及相关代码 2.5D游戏,虽然在外观上近似于3D游戏,却又不是严格意义上讲的3D游戏,故此2.5D游戏又常被称为[伪3D游戏]. 在笔者的观念 ...

  2. 现实中的算法面试题(已拿Offer)赚到了,赚到了

    算法面试题 阅读目录 写在前面 算法百科 算法题目 参考答案 博客总结 博客前言 有提到分享一下面试题,最近也是才能新公司入职没多久,忙着熟悉环境,加上前不久出去玩了一趟(顺便写了篇游记,感兴趣的可以 ...

  3. Java算法面试题(007) 蒙提霍尔问题(三门问题)

    简介 此问题本身和算法无关,本质上一个关于概率的问题,在一些高等级的面试也经常被问及,因此收录在Java算法面试题系列中. 三门问题(Monty Hall problem)亦称为蒙提霍尔问题.蒙特霍问 ...

  4. twitter java_Twitter算法面试题详解(Java实现)

    最近在网上看到一道Twitter的算法面试题,网上已经有人给出了答案,不过可能有些人没太看明白(我也未验证是否正确),现在给出一个比较好理解的答案.先看一下题目. 图1 先看看图图1.可以将方块看做砖 ...

  5. java面笔试_java笔试手写算法面试题大全含答案

    java笔试手写算法面试题大全含答案 1.统计一篇英文文章单词个数. public class WordCounting { public static void main(String[] args ...

  6. 记一道超级简单的 Java 算法面试题,但无人通过

    点击上方蓝字设为星标 下面开始今天的学习- 作者:方志宏(已获作者授权转载,禁止二次转载) 来源:https://zhuanlan.zhihu.com/p/57859872 这可能是历史上最简单的一道 ...

  7. 【机器学习算法面试题】四.深度神经网络中激活函数有哪些?

    欢迎订阅本专栏:<机器学习算法面试题> 订阅地址:https://blog.csdn.net/m0_38068876/category_11810806.html [机器学习算法面试题]一 ...

  8. java常见算法面试题

    java常见算法面试题 Java的冒泡排序,快速排序,归并排序,计数排序,二分查找法 1.斐波那契数列 1.斐波那契数列又叫黄金分割和兔子数列 :1.1.2.3.5.8.13.21.34.-- 在数学 ...

  9. java中showconfirmdialog_Java小游戏之连连看

    连连看大家应该都玩过,不多说直接上一个做好的界面截图吧,所有的功能都在上面的,要做的就只是如何去实现它们了. 差不多就是这个样子.先说一下大致的思路吧.首先编写基本的界面:把什么按钮啊,表格啊什么的都 ...

最新文章

  1. 智办事:高效远程办公指南
  2. python面试-Python面试题(整理)
  3. 创建磁盘陈列(RAID5)使用经验与原则
  4. css3新特性总结(视觉表现方面)
  5. Ceph 集群整体迁移方案
  6. 原来Github上也有这么多的JavaScript学习资源!
  7. leetcode 218. 天际线问题
  8. 怎么样用 Python 玩转 Redis !过来 咱一起聊聊!
  9. php通过ip地址查询位置,PHP通过IP获取地理位置
  10. Python循环完成剪刀石头布游戏
  11. jQuery学习(一):鼠标移动显示大图
  12. spark内核揭秘-06-TaskSceduler启动源码解析初体验
  13. C# 判断字符中是否包含中文
  14. Windows下Node.js安装Canvas插件
  15. Spring下载链接
  16. php转义还原,PHP中addslashes()和stripslashes()实现字符串转义和还原用法实例_PHP
  17. 【无人机航空摄影测量精品教程】目录:Pix4d、EPS、CC、PhotoScan、Godwork项目化作业流程及注意事项汇总
  18. u深度重装系统详细教程_u深度启动u盘安装win7系统教程
  19. 论如何用Python让你的同桌骂人...
  20. android 监控行为,一种针对Android系统App行为的监控方法

热门文章

  1. SAP Spartacus Org Unit明细页面的设计原理
  2. 显示SAP Spartacus每个page slot使用的Angular Component uid
  3. 如何创建依赖于某时间段的ABAP视图
  4. SAP Data Intelligence Modeler里的Kafka Producer和Kafka Consumer
  5. 利用Object.defineProperty挂接set钩子,监控对象属性的修改事件
  6. why my SAP CRM One Order custom callback is not called
  7. /ui2/nwbc_nav_tr /ui2/cl_nwbc_runtime35~check_navigation_tree_cache
  8. when is backend date format set in Javascript DateFormat
  9. 使用application log分析Fiori navigation target解析错误
  10. different behavior in AG3 and P8I about Territory management - popup window display