完整代码,可测试的请看左神代码,就是新建一个类,封装一下pet和count,count就是一个时间戳,用来标记谁是第几个进的,队列也有,是用来赋值的。
package org.shi;
import java.util.LinkedList;
public class Code_04_DogCatQueue {
public static class Pet {
private String type;
public Pet(String type) {
this.type = type;
}
public String getPetType() {
return this.type;
}
}
public static class Dog extends Pet {
public Dog() {
super("dog");
}
}
public static class Cat extends Pet {
public Cat() {
super("cat");
}
}
//这上面都是实现号的,不能更改
public static class PetEnterQueue {
int count;
Pet pet;
public PetEnterQueue(int count,Pet pet){
this.pet=pet;
this.count=count;
}
public Pet getPet() {
return pet;
}
public int getCount() {
return count;
}
public String getEnterPetType() {
return pet.getPetType();
}
}
public static class DogCatQueue {
LinkedList<PetEnterQueue> dogQ;
LinkedList<PetEnterQueue> catQ;
int count;
public DogCatQueue() {
dogQ=new LinkedList();
catQ=new LinkedList();
count=0;
}
public void add(Pet pet) {
if(pet.getPetType().equals("dog")) {
dogQ.add(new PetEnterQueue(count++,pet));
}else {
catQ.add(new PetEnterQueue(count++, pet));
}
}
public Pet pollAll() {//返回所有的最早那个
if(!dogQ.isEmpty()&&!catQ.isEmpty()) {
if(dogQ.peek().count<catQ.peek().count) {
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();
}else {
throw new RuntimeException("error");
}
}
public Dog pollDog() {
if(!dogQ.isEmpty()) {
return (Dog)dogQ.poll().getPet();
}else {
throw new RuntimeException("error");
}
}
public Cat pollCat() {
if(!catQ.isEmpty()) {
return (Cat)catQ.poll().getPet();
}else {
throw new RuntimeException("error");
}
}
public boolean isEmpty() {
return dogQ.isEmpty()&&catQ.isEmpty();
}
public boolean isDogQueueEmpty() {
return this.dogQ.isEmpty();
}
public boolean isCatQueueEmpty() {
return this.catQ.isEmpty();
}
}
}