【题目描述】
给出宠物(Pet),猫(Cat)和狗(Dog)的类,实现一种猫狗队列,要求如下:
- 用户可以调用add方法将cat类或者dog类的实例放入队列中
- 用户可以调用pollAll方法将队列中所有的实例按照进队列的先后顺序依次弹出
- 用户可以调用pollDog方法将队列中的dog类的实例按照进队列的先后顺序依次弹出
- 用户可以调用pollCat方法将队列中的cat类的实例按照队列的先后顺序依次弹出
- 用户可以调用isEmpty方法,检验队列中是否有dog类或cat类的实例
- 用户可以调用isDogEmpty方法,检查队列中是否有dog类的实例
- 用户可以调用isCatEmpty方法,检查队列中是否有cat类的实例
【我的代码】
/**
* 宠物 -- 父类
*/
class Pet{
private String type;
public Pet(String type) {
this.type = type;
}
public String getPetType(){
return this.type;
}
}
/**
* 子类--狗
*/
class Dog extends Pet{
public Dog() {
super("Dog");
}
}
/**
* 子类--猫
*/
class Cat extends Pet{
public Cat() {
super("Cat");
}
}
/**
* 将Pet进行封装,增加count时间戳来判断进入的先后顺序
*/
class PetEnterQueue{
private Pet pet;
private long count;
public PetEnterQueue(Pet pet,long count) {
this.pet = pet;
this.count = count;
}
public Pet getPet() {
return pet;
}
public long getCount() {
return count;
}
public String getEnterPetType(){
return this.pet.getPetType();
}
}
/**
* 猫狗对列
*/
public class DogCatQueue {
//狗队列
private Queue<PetEnterQueue> dogQ;
//猫队列
private Queue<PetEnterQueue> catQ;
private long count;
public DogCatQueue(){
this.dogQ = new LinkedList<PetEnterQueue>();
this.catQ = new LinkedList<PetEnterQueue>();
this.count = 0;
}
//可以将dog或者cat的实例添加进去
public void add(Pet pet){
if(pet.getPetType().equals("dog")){
dogQ.add(new PetEnterQueue(pet, this.count++));
}else if(pet.getPetType().equals("cat")){
catQ.add(new PetEnterQueue(pet, this.count++));
}
}
//将队列中所有的实例按照添加的先后顺序弹出
public Pet pollAll(){
if(!dogQ.isEmpty() && !catQ.isEmpty()){
if(dogQ.peek().getCount() < this.catQ.peek().getCount()){
return dogQ.poll().getPet();
}else{
return catQ.poll().getPet();
}
}else if(!dogQ.isEmpty()){
return dogQ.poll().getPet();
}else if(!catQ.isEmpty()){
return catQ.poll().getPet();
}
return null;
}
//按照dog实例添加的先后顺序弹出dog
public Dog pollDog(){
if(!dogQ.isEmpty()){
return (Dog)dogQ.poll().getPet();
}
return null;
}
//按照cat实例添加的先后顺序弹出cat
public Cat pollCat(){
if(!catQ.isEmpty()){
return (Cat)catQ.poll().getPet();
}
return null;
}
//检查队列中是否有cat或者dog的实例
public boolean isEmpty(){
return dogQ.isEmpty() && catQ.isEmpty();
}
//检查队列中是否有dog的实例
public boolean isDogQueueEmpty(){
return dogQ.isEmpty();
}
//检查队列中是否有cat的实例
public boolean isCatQueueEmpty(){
return catQ.isEmpty();
}
}