Pra*_*tal 6 java priority-queue
我创建了一个HashMap对象,它将String作为键存储,相应的值作为int存储.现在我希望有一个优先级队列,其中包含HashMap对象中存在的所有字符串,其值为作为分配优先级的参考.我写了以下代码
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
}
}
Run Code Online (Sandbox Code Playgroud)
第x行显示错误无法推断优先级队列的类型参数.请指导我做了什么错误.
您所指的错误指出,它无法猜测您省略的泛型类型参数。原因是您使用的构造函数未知。这是未知的,因为你的第二个参数不是比较器。您的比较器必须实现java.util.Comparator 接口,以便构造函数接受类型安全。
public class TComparator<String> implements Comparator<String> {
@Override
public int compare(String arg0, String arg1) {
// ...
}
}
Run Code Online (Sandbox Code Playgroud)
另请注意,在Comparator接口中调用适当的方法compare而不是compareTo.
一般性建议,我必须同意Louis Wasserman 的观点,对于两个给定的参数,比较器应该始终返回相同的结果,而不取决于应用程序的状态。很容易不考虑某些情况,而应用程序最终会出现缺陷。
| 归档时间: |
|
| 查看次数: |
8140 次 |
| 最近记录: |