Tag: priority queue

使用链接列表实现优先级队列

我已经使用链表实现了优先级队列。 在此优先级队列中,最小的int值具有最高值,因此通过调用remove方法将删除最小的方法。 节点类代码 public class Node { public int iData; public Node next; public Node(int x) { iData = x; } public void displayNode() { System.out.println(iData + ” “); } } 链接列表代码 public class LinkList { private Node first; public LinkList() { first = null; } public boolean isEmpty() { return first == null; } […]

将Java PriorityQueue更改为最大PQ

Java标准库中的Priority Queue实现似乎是最小优先级队列,我发现有些令人困惑。 为了将其转换为最大值,我创建了一个自定义比较器对象。 Comparator cmp = new Comparator() { public int compare( Integer x, Integer y ) { return y – x; } }; 我想知道是否有更优雅的解决方案。 基本上我不是一个可用于实现Dijkstras等的通用优先级队列。我甚至没有意识到会有反向操作的那些:/

为什么我会收到ConcurrentModificationException?

为什么我在代码中的指定位置获得ConcurrentModificationException? 我无法弄清楚我做错了什么… removeMin()方法用于定位列表中的min,删除它,并返回其值 import java.util.Iterator; import java.util.LinkedList; public class test1 { static LinkedList list = new LinkedList(); public static void main(String[] args) { list.add(10); list.add(4); list.add(12); list.add(3); list.add(7); System.out.println(removeMin()); } public static Integer removeMin() { LinkedList pq = new LinkedList(); Iterator itPQ = pq.iterator(); // Put contents of list into pq for (int i = […]

如何使用ThreadPoolExecutor和自定义任务实现PriorityBlockingQueue

我经常搜索,但找不到解决问题的方法。 我有自己的类BaseTask ,它使用ThreadPoolExecutor来处理任务。 如果我不想要优先级(即使用LinkedBlockingQueue ),这可以正常工作,但是当我尝试使用PriorityBlockingQueue我得到ClassCastException因为ThreadPoolExecutor将我的Tasks包装到FutureTask对象中。 这显然是可以的,因为FutureTask没有实现Comparable ,但我将如何继续解决优先级问题? 我已经读过你可以在ThreadPoolExecutor覆盖newTaskFor ,但我似乎根本找不到这个方法……? 我们欢迎所有的建议! 一些代码可以帮助: 在我的BaseTask课程中,我有 private static final BlockingQueue sWorkQueue = new PriorityBlockingQueue(); private static final ThreadFactory sThreadFactory = new ThreadFactory() { private final AtomicInteger mCount = new AtomicInteger(1); public Thread newThread(Runnable r) { return new Thread(r, “AsyncTask #” + mCount.getAndIncrement()); } }; private static final BaseThreadPoolExecutor sExecutor […]