package com.my.util;
public class Pet {
private String type;
public Pet(String type) {
this.type = type;
}
public String getPetType() {
return this.type;
}
}
package com.my.util;
public class Dog extends Pet {
public Dog() {
super("dog");
}
}
package com.my.util;
public class Cat extends Pet {
public Cat() {
super("cat");
}
}
package com.my.util;
public class PetEnterQueue {
private Pet pet;
private long count;
public PetEnterQueue(Pet pet, long count) {
this.pet = pet;
this.count = count;
}
public Pet getPet() {
return this.pet;
}
public long getCount() {
return this.count;
}
public String getEnterPetType() {
return this.pet.getPetType();
}
}
package com.my.suanfa;
import java.util.LinkedList;
import java.util.Queue;
import com.my.util.Cat;
import com.my.util.Dog;
import com.my.util.Pet;
import com.my.util.PetEnterQueue;
public class DogCatQueue {
private Queue<PetEnterQueue> catQ;
private Queue<PetEnterQueue> dogQ;
private long count;
public DogCatQueue() {
this.catQ = new LinkedList<PetEnterQueue>();
this.dogQ = new LinkedList<PetEnterQueue>();
this.count = 0;
}
public void add(Pet pet) {
if(pet.getPetType().equals("cat")) {
catQ.add(new PetEnterQueue(pet, count++));
} else if(pet.getPetType().equals("dog")) {
dogQ.add(new PetEnterQueue(pet, count++));
} else {
throw new RuntimeException("err, no dog or cat!");
}
}
public Pet pollAll() {
if(!isCatQueueEmpty() && !isDogQueueEmpty()) {
if(catQ.peek().getCount() < dogQ.peek().getCount()) {
return catQ.poll().getPet();
} else {
return dogQ.poll().getPet();
}
} else if(!isCatQueueEmpty()) {
return catQ.poll().getPet();
} else if(!isDogQueueEmpty()) {
return dogQ.poll().getPet();
} else {
throw new RuntimeException("err,your queue is empty!");
}
}
public Cat pollCat() {
if(!isCatQueueEmpty()) {
return (Cat)catQ.poll().getPet();
} else {
throw new RuntimeException("your cat queue is empty!");
}
}
public Dog pollDog() {
if(!isDogQueueEmpty()) {
return (Dog)dogQ.poll().getPet();
} else {
throw new RuntimeException("your dog queue is empty!");
}
}
public boolean isEmpty() {
return catQ.isEmpty() && dogQ.isEmpty();
}
public boolean isCatQueueEmpty() {
return catQ.isEmpty();
}
public boolean isDogQueueEmpty() {
return dogQ.isEmpty();
}
}