猫狗队列
题目如下:
代码如下:
package com.jujuxiaer.zuoshen2018.class_03;
import java.util.LinkedList;
import java.util.Queue;
public class Code_04_DogCatQueue {
public static class Pet {
private String type;
private String petName;
public Pet(String type, String petName) {
this.type = type;
this.petName = petName;
}
public String getPetType() {
return this.type;
}
public String getPetName() {
return petName;
}
}
public static class Dog extends Pet {
public Dog(String dogName) {
super("dog", dogName);
}
}
public static class Cat extends Pet {
public Cat(String catName) {
super("cat", catName);
}
}
/**
* 宠物进-队列
* 表示宠物加上个时间戳的实体
*/
public static class PetEnter {
private Pet pet;
private long count;
public PetEnter(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();
}
}
public static class DogCatQueue {
private Queue<PetEnter> dogQ;
private Queue<PetEnter> catQ;
private long count;
public DogCatQueue() {
this.dogQ = new LinkedList<>();
this.catQ = new LinkedList<>();
this.count = 0;
}
public void add(Pet pet) {
if (pet.getPetType().equals("dog")) {
this.dogQ.add(new PetEnter(pet, this.count++));
} else if (pet.getPetType().equals("cat")) {
this.catQ.add(new PetEnter(pet, this.count++));
} else {
throw new RuntimeException("err, not dog or cat");
}
}
public Pet pollAll() {
if (!this.dogQ.isEmpty() && !this.catQ.isEmpty()) {
if (this.dogQ.peek().getCount() < this.catQ.peek().getCount()) {
return this.dogQ.poll().getPet();
} else {
return this.catQ.poll().getPet();
}
} else if (!this.dogQ.isEmpty()) {
return this.dogQ.poll().getPet();
} else if (!this.catQ.isEmpty()) {
return this.catQ.poll().getPet();
} else {
throw new RuntimeException("err, queue is empty!");
}
}
public Dog pollDog() {
if (!this.isDogQueueEmpty()) {
return (Dog) this.dogQ.poll().getPet();
} else {
throw new RuntimeException("Dog queue is empty!");
}
}
public Cat pollCat() {
if (!this.isCatQueueEmpty()) {
return (Cat) this.catQ.poll().getPet();
} else {
throw new RuntimeException("Cat queue is empty!");
}
}
public boolean isEmpty() {
return this.dogQ.isEmpty() && this.catQ.isEmpty();
}
public boolean isDogQueueEmpty() {
return this.dogQ.isEmpty();
}
public boolean isCatQueueEmpty() {
return this.catQ.isEmpty();
}
}
public static void main(String[] args) {
DogCatQueue dogCatQueue = new DogCatQueue();
Pet dog1 = new Dog("dog1");
Pet cat1 = new Cat("cat1");
Pet dog2 = new Dog("dog2");
Pet cat2 = new Cat("cat2");
Pet dog3 = new Dog("dog3");
Pet cat3 = new Cat("cat3");
dogCatQueue.add(dog1);
dogCatQueue.add(cat1);
dogCatQueue.add(dog2);
dogCatQueue.add(cat2);
dogCatQueue.add(dog3);
dogCatQueue.add(cat3);
dogCatQueue.add(dog1);
dogCatQueue.add(cat1);
dogCatQueue.add(dog2);
dogCatQueue.add(cat2);
dogCatQueue.add(dog3);
dogCatQueue.add(cat3);
dogCatQueue.add(dog1);
dogCatQueue.add(cat1);
dogCatQueue.add(dog2);
dogCatQueue.add(cat2);
dogCatQueue.add(dog3);
dogCatQueue.add(cat3);
while (!dogCatQueue.isDogQueueEmpty()) {
System.out.println(dogCatQueue.pollDog().getPetName());
}
while (!dogCatQueue.isCatQueueEmpty()) {
System.out.println(dogCatQueue.pollCat().getPetName());
}
while (!dogCatQueue.isEmpty()) {
System.out.println(dogCatQueue.pollAll().getPetName());
}
}
}
下面代码的结果输出为:
while (!dogCatQueue.isDogQueueEmpty()) {
System.out.println(dogCatQueue.pollDog().getPetName());
}
输出:
dog1
dog2
dog3
dog1
dog2
dog3
dog1
dog2
dog3
下面代码的结果输出为:
while (!dogCatQueue.isCatQueueEmpty()) {
System.out.println(dogCatQueue.pollCat().getPetName());
}
输出:
cat1
cat2
cat3
cat1
cat2
cat3
cat1
cat2
cat3
下面代码的结果输出为:
while (!dogCatQueue.isEmpty()) {
System.out.println(dogCatQueue.pollAll().getPetName());
}
输出:
dog1
cat1
dog2
cat2
dog3
cat3
dog1
cat1
dog2
cat2
dog3
cat3
dog1
cat1
dog2
cat2
dog3
cat3