1.猫狗队列
【题目】 宠物、 狗和猫的类如下:
public class Pet {
private String type;
public Pet(String type) {
this.type = type;
}
public String getPetType() {
return this.type;
}
}
public class Dog extends Pet {
public Dog() {
super("dog");
}
}
public class Cat extends Pet {
public Cat() {
super("cat");
}
}
实现一种狗猫队列的结构, 要求如下:
- 用户可以调用add方法,将cat类或dog类的实例放入队列中;
- 用户可以调用pollAll方法, 将队列中所有的实例按照进队列的先后顺序依次弹出;
- 用户可以调用pollDog方法, 将队列中dog类的实例按照进队列的先后顺序依次弹出;
- 用户可以调用pollCat方法, 将队列中cat类的实例按照进队列的先后顺序依次弹出;
- 用户可以调用isEmpty方法, 检查队列中是否还有dog或cat的实例;
- 用户可以调用isDogEmpty方法, 检查队列中是否有dog类的实例;
- 用户可以调用isCatEmpty方法, 检查队列中是否有cat类的实例。
1.1 分析
使用两个队列实现:
add():当宠物进入结构时:
- 若宠物为狗,则进入Dog队列;
- 若为猫,则进入Cat队列。
pollDog():从Dog队列取头一个狗;
pollCat():从Cat队列取头一个猫;
pollAll():得设置一个计数器count,作为时间戳,进来一个宠物,无论猫狗,count++,赋给这个宠物的count,取出时,由Dog队列和Cat队列的头一个的count来判断哪个宠物进的早点。
isEmpty():Dog队列和Cat队列都为空时返回true;
isDogEmpty():Dog队列为空时返回true;
isDogEmpty():Cat队列为空时返回true;
1.2 代码实现
注:不能更改给定的Pet、Cat、Dog类,需自己写其他的类实现以上功能。
package Solution;
import java.util.LinkedList;
import java.util.Queue;
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");
}
}
class PetQueue{
private Pet pet;
private long count;
public PetQueue(Pet pet, long count) {
this.pet=pet;
this.count=count;
}
public Pet getPet() {
return this.pet;
}
public long getCount() {
return this.count;
}
public String getPetType() {
return this.pet.getPetType();
}
}
public class CatDogQueue {
private Queue<PetQueue> DogQ;
private Queue<PetQueue> CatQ;
long count;//计数器
public CatDogQueue() {
this.DogQ=new LinkedList<PetQueue>();
this.CatQ=new LinkedList<PetQueue>();
this.count=0;
}
public void add(Pet pet) {
//根据类型入相应的队列
if(pet.getPetType().equals("