java优先级队列
Ⅰ 如何使用java 5中的ExecutorService的我实现了任务优先级
任务扩展Runnable或Callable<T>和Comparable。然后换一个ThreadPoolExecutor与PriorityBlockingQueue作为队列,并且只接受任务,你的界面。 以你的考虑,它看起来像一个选项是延长ThreadPoolExecutor,并重写submit()方法。请参阅AbstractExecutorService看什么默认的样子,他们做的是包裹Runnable或Callable在FutureTask和execute()它。我想通过写一个包装类可能做到这一点,ExecutorService并委托给一个内ThreadPoolExecutor。包装在有你的优先级,从而使您的Comparator可以得到它
Ⅱ java中的队列都有哪些
常见的有:
有界队列:
ArrayBlockingQueue
LinkedBlockingQuene
priorityBlockingQuene(具有优先级的队列)
无界队列:
SynchronousQuene
Ⅲ java 优先级队列是怎么实现的
你要的是这样的效果么 public static void main(String[] args) { PriorityQueue pq = new PriorityQueue(); pq.add(5); pq.add(2); pq.add(3); pq.add(4); System.out.println("取出了"+pq.poll()+",队列剩余"+Arrays.toString(pq.toArray()));
Ⅳ java中关于堆实现优先队列的问题,我编译可以通过,但是运行的时候会出现数组越界的错误,是怎么回事
看下MaxHeapify这个方法,是不是逻辑有些问题:
if (l <= heapsize && A[l] > A[i])
largest = l;
假如数组A长度为8的时候。当i为4的时候,l为8,你去判断A[8]>A[4],A[8]这里数组越界了吧。
Ⅳ 问个java中有关优先队列的问题,求高手!
pq.offer(new PriorityQData(alist[i],blist[i]));这个是向优先队列中的插入语句
你插入的是PriorityQData数据类型,这个应该是你自己定义的数据类型吧
那么pq.poll()返回的也应该是PriorityQData,而不是char,所以会出现:不兼容的类型
Ⅵ java 优先队列(priority queue)中,提取第二优先级的值并删除,但是不删除第一优先值的数,怎么实现
你要的是这样的效果么
publicstaticvoidmain(String[]args){
PriorityQueue<Integer>pq=newPriorityQueue<Integer>();
pq.add(5);
pq.add(2);
pq.add(3);
pq.add(4);
System.out.println("取出了"+pq.poll()+",队列剩余"+Arrays.toString(pq.toArray()));
/**
*假设3是我不满意的值,我要取到3后面的值
*/
if(pq.peek()==3){
System.out.println("3真不是我想要的,我可以接着往下处理么?ok,将3先保留吧");
inta=pq.poll();//将当前的第一级优先的值暂存下来,等第二级优先的值取出后再将其加入
pq.poll();
pq.add(a);
System.out.println("队列剩余"+Arrays.toString(pq.toArray()));
}
System.out.println("取出了"+pq.poll()+",队列剩余"+Arrays.toString(pq.toArray()));
}
打印效果:
取出了2,队列剩余[3, 4, 5]
3真不是我想要的,我可以接着往下处理么?ok,将3先保留吧
队列剩余[3, 5]
取出了3,队列剩余[5]
我觉得这个是优先队列,虽然poll时候会将优先级高的数据先取出,但是同样的,如果加进去是高优先级的数据 下次取的时候它依然还是高优先级的数据。
Ⅶ java优先队列这里的构造函数用法该怎么理解
很明显,用到的构造函数是 PriorityQueue(Comparator<? super E> comparator) 。
所以 ((a, b) -> a[0] - b[0]) 所代表的是一个 comparator 。
不明白这个式子,说明对与 JDK8 中的 lamda 表达式不熟悉 。
其实这个式子是 对 Comparator 接口中 int compare(T o1, T o2)方法的具体实现 。
(a, b) 代表的是 compare方法中的两个参数。
a[0] - b[0] 代表compare方法的返回值。
PriorityQueue 有了 comparator 比较器,便能确定队列中元素的优先级。
Ⅷ 优先级调度算法如何用JAVA实现
在多线程时,可以手动去设置每个线程的优先级setPriority(int newPriority)
更改线程的优先级。
Ⅸ 什么是Java优先级队列(PriorityQueue)
PriorityQueue是一个基于优先级堆的无界队列,它的元素是按照自然顺序(naturalorder)排序的。在创建的时候,可以给它提供一个负责给元素排序的比较器。PriorityQueue不允许null值,因为他们没有自然顺序,或者说他们没有任何的相关联的比较器。最后,PriorityQueue不是线程安全的,入队和出队的时间复杂度是O(log(n))。
Ⅹ java,优先级队列和有序数组区别
数组是有序的,访问和修改都要按下标一个个地去找。
优先级队列,是要看优先级的,谁的优先级更高,谁就先得到权限。不分排队的顺序。