Tôi đang cố gắng viết một thuật toán sử dụng hàng đợi ưu tiên tối thiểu, vì vậy tôi đã xem xét trên google và tìm thấy PriorityQueue. Có vẻ như để sử dụng nó, mặc dù, tôi sẽ cần phải nói cho nó như thế nào tôi muốn nó để ưu tiên, và rằng cách để làm điều này là với một so sánh (tôi muốn so sánh các trường dữ liệu cụ thể của "Node1" của tôi các đối tượng). Nhiều googling đã trình bày ý tưởng tạo ra một trình so sánh mới thực hiện Comparator nhưng ghi đè phương thức so sánh. Những gì tôi đang cố gắng là thế này (và các biến thể khác của nó là tốt):Thực hiện so sánh Java
import java.util.Comparator;
public class distComparator implements Comparator {
@Override
public int compare(Node1 x, Node1 y){
if(x.dist<y.dist){
return -1;
}
if(x.dist>y.dist){
return 1;
}
return 0;
}
}
Các cuộc biểu tình biên dịch trên nhiều căn cứ, một trong số đó là tôi không có trên một thanh cuộn lớp so sánh (mà nó nói là trừu tượng)
error: distComparator is not abstract and does not override abstract method compare(Object,Object) in Comparator
Tôi đã chuyển sang chế độ "so sánh (đối tượng x, đối tượng y)", sẽ giải quyết vấn đề đó. Tại thời điểm này mặc dù trình biên dịch phàn nàn rằng nó không thể tìm thấy biến "dist" trong x hoặc y - điều này có ý nghĩa, vì chúng là một phần của lớp Node1 của tôi, không phải là lớp Object.
Vậy điều này có nghĩa là hoạt động như thế nào? Nó sẽ có loại Object
, rõ ràng, nhưng sau đó làm thế nào để tôi chuyển nó đến biến đúng?
Bạn cũng có thể viết 'trở lại x.dist - y.dist' – Polygnome
@Polygnome: Tùy thuộc vào phạm vi tham gia này có thể hoặc có thể không làm việc cho các số nguyên, nhưng là một khởi động hoàn chỉnh cho các giá trị dấu phẩy động. – NPE
Cảm ơn bạn! Giải quyết! –