Класс PriorityQueue является очередью с приоритетом, поддерживает интерфейс Queue. Элементы добавляются в очередь на основе компаратора. Объект коллекции должен поддерживать интерфейс Comparable. Примеры работы с коллекцией:
class Coordinate implements Comparable <Coordinate> { private int X; private int Y;
public Coordinate(int X, int Y) { this.X = X; this.Y = Y; }
@Override public String toString() { return "X: " + X + ", Y: " + Y; }
@Override public boolean equals(Object obj) { if(obj instanceof Coordinate){ Coordinate c = (Coordinate)obj; return c.X == this.X && c.Y == this.Y; }else { return super.equals(obj); } }
@Override public int hashCode() { int hash = 7; hash = 59 * hash + this.X; hash = 59 * hash + this.Y; return hash; }
@Override public int compareTo(Coordinate o) { return this.X - o.X; } }
//выводим все содержимое очереди в текстовую область (при этом очередь очищается) void RemoveAllQueueElements(Queue <Coordinate> q){ Coordinate c = null; c = q.poll(); while(c != null) { jTextArea1.append("Удалили из очереди: " + c.toString() + "\n"); c = q.poll(); } } void IteratorToTextArea(Iterator <Coordinate> iter, JTextArea ta){ if (iter != null & ta != null){ while(iter.hasNext()){ ta.append(iter.next().toString() + "\n"); } } }; private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { PriorityQueue <Coordinate> pq = new PriorityQueue<Coordinate>(); Queue <Coordinate> qitf = pq; Random rnd = new Random(); int value = 0; for(int i = 0; i < 20; i ++){ value = rnd.nextInt(50); qitf.add(new Coordinate(value, value)); } //несмотря на то, что элементы помещаются в очередь отсортированными, //итератор не выводит очередь в отсортированном виде jTextArea1.append("Выводим через итератор неотсортированные данные\n"); IteratorToTextArea(qitf.iterator(), jTextArea1); //а вот методы интерфейса Queue по извлечению элементов //достают из очереди отсортированные данные jTextArea1.append("Выводим через poll() отсортированные данные\n"); RemoveAllQueueElements(qitf);
|