JAVA中在某游戏系统有猫狗猪_算法面试题之猫狗队列(java)
【题目】:
已知有宠物:狗、猫如下,实现一种猫狗队列的结构:
/**
* @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)相关推荐
- Java中2.5D游戏的设计与实现(3)—八方走法实现原理及相关代码
Java中2.5D游戏的设计与实现(3)-八方走法实现原理及相关代码 2.5D游戏,虽然在外观上近似于3D游戏,却又不是严格意义上讲的3D游戏,故此2.5D游戏又常被称为[伪3D游戏]. 在笔者的观念 ...
- 现实中的算法面试题(已拿Offer)赚到了,赚到了
算法面试题 阅读目录 写在前面 算法百科 算法题目 参考答案 博客总结 博客前言 有提到分享一下面试题,最近也是才能新公司入职没多久,忙着熟悉环境,加上前不久出去玩了一趟(顺便写了篇游记,感兴趣的可以 ...
- Java算法面试题(007) 蒙提霍尔问题(三门问题)
简介 此问题本身和算法无关,本质上一个关于概率的问题,在一些高等级的面试也经常被问及,因此收录在Java算法面试题系列中. 三门问题(Monty Hall problem)亦称为蒙提霍尔问题.蒙特霍问 ...
- twitter java_Twitter算法面试题详解(Java实现)
最近在网上看到一道Twitter的算法面试题,网上已经有人给出了答案,不过可能有些人没太看明白(我也未验证是否正确),现在给出一个比较好理解的答案.先看一下题目. 图1 先看看图图1.可以将方块看做砖 ...
- java面笔试_java笔试手写算法面试题大全含答案
java笔试手写算法面试题大全含答案 1.统计一篇英文文章单词个数. public class WordCounting { public static void main(String[] args ...
- 记一道超级简单的 Java 算法面试题,但无人通过
点击上方蓝字设为星标 下面开始今天的学习- 作者:方志宏(已获作者授权转载,禁止二次转载) 来源:https://zhuanlan.zhihu.com/p/57859872 这可能是历史上最简单的一道 ...
- 【机器学习算法面试题】四.深度神经网络中激活函数有哪些?
欢迎订阅本专栏:<机器学习算法面试题> 订阅地址:https://blog.csdn.net/m0_38068876/category_11810806.html [机器学习算法面试题]一 ...
- java常见算法面试题
java常见算法面试题 Java的冒泡排序,快速排序,归并排序,计数排序,二分查找法 1.斐波那契数列 1.斐波那契数列又叫黄金分割和兔子数列 :1.1.2.3.5.8.13.21.34.-- 在数学 ...
- java中showconfirmdialog_Java小游戏之连连看
连连看大家应该都玩过,不多说直接上一个做好的界面截图吧,所有的功能都在上面的,要做的就只是如何去实现它们了. 差不多就是这个样子.先说一下大致的思路吧.首先编写基本的界面:把什么按钮啊,表格啊什么的都 ...
最新文章
- 智办事:高效远程办公指南
- python面试-Python面试题(整理)
- 创建磁盘陈列(RAID5)使用经验与原则
- css3新特性总结(视觉表现方面)
- Ceph 集群整体迁移方案
- 原来Github上也有这么多的JavaScript学习资源!
- leetcode 218. 天际线问题
- 怎么样用 Python 玩转 Redis !过来 咱一起聊聊!
- php通过ip地址查询位置,PHP通过IP获取地理位置
- Python循环完成剪刀石头布游戏
- jQuery学习(一):鼠标移动显示大图
- spark内核揭秘-06-TaskSceduler启动源码解析初体验
- C# 判断字符中是否包含中文
- Windows下Node.js安装Canvas插件
- Spring下载链接
- php转义还原,PHP中addslashes()和stripslashes()实现字符串转义和还原用法实例_PHP
- 【无人机航空摄影测量精品教程】目录:Pix4d、EPS、CC、PhotoScan、Godwork项目化作业流程及注意事项汇总
- u深度重装系统详细教程_u深度启动u盘安装win7系统教程
- 论如何用Python让你的同桌骂人...
- android 监控行为,一种针对Android系统App行为的监控方法
热门文章
- SAP Spartacus Org Unit明细页面的设计原理
- 显示SAP Spartacus每个page slot使用的Angular Component uid
- 如何创建依赖于某时间段的ABAP视图
- SAP Data Intelligence Modeler里的Kafka Producer和Kafka Consumer
- 利用Object.defineProperty挂接set钩子,监控对象属性的修改事件
- why my SAP CRM One Order custom callback is not called
- /ui2/nwbc_nav_tr /ui2/cl_nwbc_runtime35~check_navigation_tree_cache
- when is backend date format set in Javascript DateFormat
- 使用application log分析Fiori navigation target解析错误
- different behavior in AG3 and P8I about Territory management - popup window display