【发布时间】:2012-10-11 00:49:16
【问题描述】:
我遇到了这个问题,我有一个 PiorityBlockingQueue 来对其中的项目进行排序。用户可以对添加到队列中的项目进行排序有几个选项。
我遇到的问题是尝试通过Item 的出现次数最多来排序队列。
比较的选择在MyQueue的构造函数中确定。但是(例如,低、中、高)的计数直到以后才确定。确定后,想从ItemComparator调用update(String lst)方法更新hashmap,使排序正确。
所以我的问题是我不能调用那个方法。我知道我错过了一些东西,但我无法弄清楚。有什么帮助吗?也许有比我现在做的更好的设计?
public class ItemComparator implements Comparator<Item>
{
public void update(String lst){
test = lst;
}
public int compare(Item o1, Item o2) {
HashMap<String,Integer> priority = new HashMap<>();
priority.put("LOW", 1);
priority.put("MEDIUM", 2);
priority.put("HIGH", 3);
if (priority.get(o1.getPriority()) > priority.get(o2.getPriority())) {
return -1;
}
if (priority.get(o1.getPriority()) < priority.get(o2.getPriority())) {
return 1;
}
return 0;
}
}
此语句不适用于此类 comparer.update(aString);
public class MyQueue implements AQueue{
private Comparator<Ticket> comparator;
private PriorityBlockingQueue<Ticket> listOfTickets;
private String policy;
BlockingQImpl(String processingPolicy) throws InvalidDataException {
setPolicy(processingPolicy.toUpperCase());
setComparator(policy);
}
private void setComparator(String policy) throws InvalidDataException {
if (policy.equals("THIS")) {
comparator = new ItemComparator(countString);
}
listOfTickets = new PriorityBlockingQueue<>(10, comparator);
}
public void addList(int id) {
ticks.add(id)
comparator.update(aString);
}
}
【问题讨论】:
-
它在 MyQueue 中的一种方法中,我已经更新以显示它
-
您的代码看起来仍然不正确。
BlockingQImpl看起来像一个构造函数,但与类名MyQueue不匹配。你能确保你发布了正确的代码吗?还有错误信息。 -
是
ItemComparator中的update方法。如果是,那么您可能需要将private Comparator<Ticket> comparator;更改为private ItemComparator comparator;。
标签: java priority-queue comparator