猫狗队列求解

来源:互联网 发布:苹果6s淘宝虚拟定位 编辑:程序博客网 时间:2024/04/30 14:15

这道题主要锻炼了类的包装,考察面向对象的思想

题目:

宠物、猫和狗的类如下:

public class Pet{private String type;public Pet(String type){this.type = type;}public String getPetType(){return this.type;}}public class Dog extends Pets{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类的实例
要求所有实现的方法,时间复杂度都为O(1)

public class DogCat{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{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();}}public static 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;}public void add(Pet pet){if(pet.getPetType().equals("dog")){this.dogQ.add(new PetEnterQueue(pet, this.count++));}else if(pet.getPetType().equals("cat")){this.catQ.add(new PetEnterQueue(pet, this.count++));}else{throw new RuntimException("No dogs or cats");}}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("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("Cat3 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();}}}