Я изучаю Queue Collection и не понимаю, зачем мне реализовывать Comparable интерфейс, если я использую PriorityQueue?Я использовал Comparable и Comparator интерфейс в пользовательской сортировке для массива / списка.Но почему мне нужно реализовать для PriorityQueue, когда я не хочу его сортировать ...
В приведенном ниже примере я вижу, что не могу добавить элемент в PriorityQueue, если нереализовать сопоставимый интерфейс.
И большое недоразумение для меня после того, как я запустил этот код, список не отсортирован по идентификатору?Я задаю этот вопрос, потому что вижу, что метод compareTo () переопределен, и я использую этот метод, когда хочу отсортировать список.
Я помню, что использовал этот код точно, когда выполнял пользовательскую сортировку списка.И список был отсортирован по идентификатору.Почему очередь не сортируется в этом случае?
Извините за мою грамматику английского языка.Любая обратная связь будет оценена!
import java.util.PriorityQueue;
import java.util.Queue;
public class QueueExample {
public static void main(String[] args) {
Queue<Book> queue = new PriorityQueue<>();
//Creating Books
Book b1=new Book(121,"Let us C","Yashwant Kanetkar","BPB",8);
Book b2=new Book(233,"Operating System","Galvin","Wiley",6);
Book b3=new Book(101,"Data Communications & Networking","Forouzan","Mc Graw Hill",4);
Book b4=new Book(319,"Learn Java","Yanis Orhan","HEX",3);
Book b5=new Book(191,"Linux","Hadgy","Haman",7);
Book b6=new Book(287,"Python Programming","Tarzan","GEN",5);
//Adding Books to the queue
queue.add(b1);
queue.add(b2);
queue.add(b3);
queue.add(b4);
queue.add(b5);
queue.add(b6);
System.out.println("Traversing the queue elements:");
//Traversing queue elements
for(Book b : queue) {
System.out.println(b.id+" "+b.name+" "+b.author+" "+b.publisher+" "+b.quantity);
}
queue.remove();
System.out.println("After removing one book record:");
for(Book b : queue) {
System.out.println(b.id + " " + b.name + " " + b.author + " " + b.publisher + " " + b.quantity);
}
}
}
Книга
public class Book implements Comparable<Book> {
int id;
String name,author,publisher;
int quantity;
public Book(int id, String name, String author, String publisher, int quantity) {
this.id = id;
this.name = name;
this.author = author;
this.publisher = publisher;
this.quantity = quantity;
}
@Override
public int compareTo(Book b) {
if(id > b.id) {
return 1;
} else if (id < b.id) {
return -1;
} else {
return 0;
}
}
}
Я вижу, что голова - это элемент с самым низким идентификатором, но после этого нет порядка.Почему очередь не сортируется по идентификатору?
Traversing the queue elements:
101 Data Communications & Networking Forouzan Mc Graw Hill 4
191 Linux Hadgy Haman 7
121 Let us C Yashwant Kanetkar BPB 8
319 Learn Java Yanis Orhan HEX 3
233 Operating System Galvin Wiley 6
287 Python Programming Tarzan GEN 5
After removing one book record:
121 Let us C Yashwant Kanetkar BPB 8
191 Linux Hadgy Haman 7
287 Python Programming Tarzan GEN 5
319 Learn Java Yanis Orhan HEX 3
233 Operating System Galvin Wiley 6
ОБНОВЛЕНИЕ
Если я создаю ArrayList и сортирую его с помощью того же метода compareTo (), и янапечатайте это с тем же самым для каждого цикла, список отсортирован, и это напечатано в этом порядке.
Код для ArrayList:
import java.util.ArrayList;
import java.util.Collections;
public class BookExample {
public static void main(String args[]) {
ArrayList<Book> bookList = new ArrayList<>();
Book b1=new Book(121,"Let us C","Yashwant Kanetkar","BPB",8);
Book b2=new Book(233,"Operating System","Galvin","Wiley",6);
Book b3=new Book(101,"Data Communications & Networking","Forouzan","Mc Graw Hill",4);
Book b4=new Book(319,"Learn Java","Yanis Orhan","HEX",3);
Book b5=new Book(191,"Linux","Hadgy","Haman",7);
Book b6=new Book(287,"Python Programming","Tarzan","GEN",5);
bookList.add(b1);
bookList.add(b2);
bookList.add(b3);
bookList.add(b4);
bookList.add(b5);
bookList.add(b6);
Collections.sort(bookList);
for (Book b : bookList) {
System.out.println(b.id + ", " + b.name + ", " + b.author + ", "
+ b.publisher + ", " + b.quantity);
}
}
}
Book
public class Book implements Comparable<Book> {
int id;
String name, author, publisher;
int quantity;
public Book(int id, String name, String author, String publisher, int quantity) {
this.id = id;
this.name = name;
this.author = author;
this.publisher = publisher;
this.quantity = quantity;
}
public int compareTo(Book b) {
if(id > b.id) {
return 1;
} else if (id < b.id) {
return -1;
} else {
return 0;
}
}
}
Результат в консоли:
101, Data Communications & Networking, Forouzan, Mc Graw Hill, 4
121, Let us C, Yashwant Kanetkar, BPB, 8
191, Linux, Hadgy, Haman, 7
233, Operating System, Galvin, Wiley, 6
287, Python Programming, Tarzan, GEN, 5
319, Learn Java, Yanis Orhan, HEX, 3
Почему длякаждый цикл работает очень хорошо, когда я печатаю ArrayList, и он не работает, когда я пытаюсь напечатать PriorityQueue?