2012-09-24 120 views
6

Tôi đã tạo một đối tượng HashMap lưu trữ một String dưới dạng khóa và giá trị tương ứng như int. Bây giờ tôi muốn có một hàng đợi ưu tiên có tất cả các chuỗi hiện diện trong đối tượng HashMap với giá trị làm tham chiếu cho việc gán các mức độ ưu tiên. Tôi đã viết mã sau đâyHàng đợi ưu tiên cho đối tượng HashMap trong Java

public class URIQueue { 

     private HashMap<String,Integer> CopyQURI; 
     private PriorityQueue<String> QURI; 

     public class TComparator<String> { 
     public int compareTo(String s1, String s2) { 
      if (CopyQURI.get(s2) - CopyQURI.get(s1) >= 0) { 
       return 1; 
      } else { 
       return 0; 
      } 
     } 
     } 

     public URIQueue() { 
     CopyQURI=new HashMap<>(100); 
     TComparator<String> tc=new TComparator<>(); 
     QURI=new PriorityQueue<>(100, tc); //Line x 
     } 
} 

Dòng x là lỗi hiển thị không thể suy luận loại đối số cho hàng đợi ưu tiên. Xin vui lòng hướng dẫn tôi những gì sai lầm tôi đã làm.

+3

Loại "bộ so sánh có thể thay đổi" này có thể vô cùng nguy hiểm và dễ bị lỗi. Có lẽ bạn nên tạo một lớp mới để giữ chuỗi và số nguyên với nhau. –

Trả lời

3

Lỗi bạn đang đề cập đến các tiểu bang, rằng nó không thể đoán thông số loại chung mà bạn đã bỏ qua. Lý do cho điều đó là hàm tạo mà bạn đang sử dụng không được biết. Nó không được biết, bởi vì bạn đối số thứ hai không phải là một so sánh. Bộ so sánh của bạn phải triển khai java.util.Comparator interface để có thể nhập an toàn cho hàm tạo để chấp nhận.

public class TComparator<String> implements Comparator<String> { 

    @Override 
    public int compare(String arg0, String arg1) { 
     // ... 
    } 
} 

Cũng quan tâm, trong giao diện Comparator phương pháp thích hợp được gọi là compare và không compareTo.

Lời khuyên chung, tôi phải đồng ý với Louis Wasserman, đối với hai đối số đã cho, một bộ so sánh phải luôn trả về cùng một kết quả và không phụ thuộc vào trạng thái của ứng dụng. Nó chỉ là quá dễ dàng không nghĩ đến một số trường hợp và ứng dụng cuối cùng là thiếu sót.

+0

thanks.it đã hoạt động .. –

Các vấn đề liên quan