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,優先順序隊列和有序數組區別
數組是有序的,訪問和修改都要按下標一個個地去找。
優先順序隊列,是要看優先順序的,誰的優先順序更高,誰就先得到許可權。不分排隊的順序。