import java.util.ArrayList; public class QM implements QueueInterface, QMerge { ArrayList cq = new ArrayList<>(); @Override public int size() { return cq.size(); } @Override public boolean isEmpty() { return cq.size()==0; } @Override public W first() { if (isEmpty()) return null; return cq.get(0); } @Override public void enqueue(W e) { cq.add(e); } @Override public W dequeue() { if (isEmpty()) return null; W tmp = cq.get(0); cq.remove(0); return tmp; } public String toString() { return cq.toString(); } public static void main(String[] args) { QM qq = new QM<>(); qq.enqueue(-3); qq.enqueue(7); qq.enqueue(14); qq.enqueue(18); QM qr = new QM<>(); for (int i=0; i<10; i++) qr.enqueue(i); System.out.println(qq); System.out.println(qr); QueueInterface resu = qq.queueMerge(qq,qr); System.out.println(resu); } @Override public QueueInterface queueMerge(QueueInterface q1, QueueInterface q2) { QM merged = new QM<>(); while (!q1.isEmpty() || !q2.isEmpty()) { if (q2.isEmpty()) { merged.enqueue(q1.dequeue()); } else if (q1.isEmpty()) { merged.enqueue(q2.dequeue()); } else { if (((Comparable)q2.first()).compareTo(((Comparable)q1.first())) < 0) { merged.enqueue(q2.dequeue()); } else { merged.enqueue(q1.dequeue()); } } } return merged; } }