-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathDogCatQueue.java
More file actions
146 lines (118 loc) · 2.91 KB
/
DogCatQueue.java
File metadata and controls
146 lines (118 loc) · 2.91 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
package ds;
import java.util.LinkedList;
import java.util.NoSuchElementException;
/**
* Queue to distinguish between Dog & Cat.
*
* @author shivam.maharshi
*/
public class DogCatQueue {
private Queue catQueue = new Queue();
private Queue dogQueue = new Queue();
public void enqueue(Animal animal) {
if (animal != null) {
if (animal.getType() == 'C') {
catQueue.enqueue(animal);
} else if (animal.getType() == 'D') {
dogQueue.enqueue(animal);
} else {
System.out.println("Wrong type of animal");
}
}
}
public Animal dequeueAny() {
Animal cat = catQueue.peek();
Animal dog = dogQueue.peek();
if (cat != null && dog != null) {
return cat.getTimestamp() > dog.getTimestamp() ? cat : dog;
} else if (cat == null && dog != null) {
return dog;
} else if (cat != null && dog == null) {
return cat;
} else {
return null;
}
}
public Animal dequeueDog() {
return dogQueue.dequeue();
}
public Animal dequeueCat() {
return catQueue.dequeue();
}
}
class Queue {
private LinkedList<Animal> queue = new LinkedList<Animal>();
public void enqueue(Animal animal) {
queue.add(animal);
}
public Animal dequeue() {
try {
return queue.remove();
} catch (NoSuchElementException e) {
return null;
}
}
public Animal peek() {
try {
Animal animal = queue.getFirst();
return animal;
} catch (NoSuchElementException e) {
return null;
}
}
public static void main(String[] args) {
Animal d1 = new Animal(1, 'D');
Animal d2 = new Animal(2, 'D');
Animal d3 = new Animal(3, 'D');
Animal c1 = new Animal(4, 'C');
Animal c2 = new Animal(5, 'C');
Animal d4 = new Animal(6, 'D');
Animal c3 = new Animal(7, 'C');
DogCatQueue dcQueue = new DogCatQueue();
dcQueue.enqueue(d1);
dcQueue.enqueue(d2);
dcQueue.enqueue(d3);
dcQueue.enqueue(c1);
dcQueue.enqueue(c2);
dcQueue.enqueue(d4);
dcQueue.enqueue(c3);
System.out.println(dcQueue.dequeueCat());
System.out.println(dcQueue.dequeueCat());
System.out.println(dcQueue.dequeueCat());
System.out.println(dcQueue.dequeueCat());
System.out.println(dcQueue.dequeueDog());
System.out.println(dcQueue.dequeueAny());
}
}
class Animal {
private int id;
private char type;
private long timestamp;
@Override
public String toString() {
return "Animal [id=" + id + ", type=" + type + ", timestamp=" + timestamp + "]";
}
public Animal(int id, char type) {
this.id = id;
this.type = type;
this.timestamp = System.currentTimeMillis();
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public char getType() {
return type;
}
public void setType(char type) {
this.type = type;
}
public long getTimestamp() {
return timestamp;
}
public void setTimestamp(long timestamp) {
this.timestamp = timestamp;
}
}