<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    海闊天空

    I'm on my way!
    隨筆 - 17, 文章 - 69, 評論 - 21, 引用 - 0
    數據加載中……

    java中關于優先級隊列的實現

            這幾天一直在搞關于優先級隊列的實現,因為要考慮到線程的安全,所以PriorityQueue就不適用了。一個非常簡單的實現方 法,那就是把優先級比較好的插入一個隊列,優先級低的插入另一個隊列,取數的時候先在優先級高的隊列上取數。這有個缺點就是如果優先級別越多的話,隊列就 越多。
            因為要線程安全,隊列采用ConcurrentLinkedQueue這個線程安全的,而api文檔上說ConcurrentLinkedQueue采用了有效的“無等待 (wait-free)”算法,所以它的吞吐量是很不錯的!
        簡單代碼如下:
    1. package test;

    2. import java.util.concurrent.ConcurrentLinkedQueue;

    3. public class PriorityQueueTest {

    4.     public static void main(String[] args) {
    5.         ConcurrentLinkedQueue<String> highPriority = new ConcurrentLinkedQueue<String>(); //高優先級
    6.         ConcurrentLinkedQueue<String> lowPriority = new ConcurrentLinkedQueue<String>();  //低優先級
    7.         
    8.         highPriority.add("aaa");
    9.         highPriority.add("bbb");
    10.         highPriority.add("111");
    11.         
    12.         lowPriority.add("ccc");
    13.         lowPriority.add("ddd");
    14.         lowPriority.add("222");
    15.         
    16.         int i = 0 ,j = 0, k=0;
    17.         while(true){
    18.             while(true){
    19.                 if(!highPriority.isEmpty()){
    20.                     System.out.print(highPriority.remove());
    21.                     i++;
    22.                     k++;
    23.                     System.out.println(", i = "+i+", k="+k);
    24.                     break;
    25.                 }
    26.                 if(!lowPriority.isEmpty()){
    27.                     System.out.print(lowPriority.remove());
    28.                     j++;
    29.                     k++;
    30.                     System.out.println(", j = "+j+", k="+k);
    31.                     break;
    32.                 }
    33.                 break;
    34.             }
    35.             try {
    36.                 Thread.sleep(100);
    37.             } catch (InterruptedException e) {
    38.                 e.printStackTrace();
    39.             }
    40.         }
    41.     }
    42. }

       
     
            
          還有一種是,通過繼承PriorityQueue并實現Comparable接口,然后自已重寫過compareTo方法就能實現很強大的優先級隊列了,不過缺點是線程不安全的!
          代碼如下:
    1. package test;

    2. import java.util.PriorityQueue;

    3. public class PriorityTest extends PriorityQueue<PriorityTest.Test>{
    4.     static class Test implements Comparable<Test>{
    5.         String packet;
    6.         int priotity;
    7.         
    8.         public Test(String packet, int priotity) {
    9.             this.packet = packet;
    10.             this.priotity = priotity;
    11.         }
    12.         
    13.         public int compareTo(Test arg) { 
    14.             if(priotity < arg.priotity)
    15.                 return 1;
    16.             else if(priotity > arg.priotity)
    17.                 return -1;
    18.             else
    19.                 return 0;
    20.         } 
    21.         
    22.         public String toString(){
    23.             return packet; 
    24.         }
    25.     }
    26.     
    27.     public void add(String str, int priority){
    28.         super.add(new Test(str,priority));
    29.     }
    30.     
    31.     public static void main(String args[]){
    32.         PriorityTest pTest = new PriorityTest();
    33.         pTest.add("aaa",3);  //優先級最高
    34.         pTest.add("bbb",2);
    35.         pTest.add("ccc",1);
    36.         
    37.         while(!pTest.isEmpty()){
    38.             System.out.println(pTest.remove());
    39.         }
    40.     }
    41. }










    摘自:http://blog.csdn.net/liuzhengkang/archive/2009/01/05/3714047.aspx

    posted on 2009-08-15 17:25 石頭@ 閱讀(5519) 評論(1)  編輯  收藏 所屬分類: DS & Alg

    評論

    # re: java中關于優先級隊列的實現  回復  更多評論   

    如果要線程安全的優先級隊列不是有PriorityBlockingQueue么?不知道你用的哪個版本,不過jdk1.6里是有的
    2012-07-19 20:51 | 游刃

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 亚洲精品无码你懂的网站| 夜夜亚洲天天久久| 暖暖在线视频免费视频| 亚洲最大黄色网站| 又粗又大又长又爽免费视频| a级毛片免费观看视频| 亚洲一区免费在线观看| 亚洲色图综合在线| 222www在线观看免费| 亚洲国产精品18久久久久久| 亚洲色大成网站WWW久久九九| 91九色精品国产免费| 成人嫩草影院免费观看| 91精品国产亚洲爽啪在线观看| 日韩在线看片免费人成视频播放| 日本高清免费观看| 亚洲a无码综合a国产av中文| 久久久久亚洲av无码专区蜜芽| 日本一道一区二区免费看 | 美女裸体无遮挡免费视频网站| 亚洲国产高清人在线| 日韩伦理片电影在线免费观看| 日韩av无码久久精品免费| 精品在线视频免费| 亚洲免费电影网站| 亚洲国产成人一区二区精品区 | 四虎1515hh永久久免费| 中文字幕乱理片免费完整的| 亚洲无吗在线视频| 亚洲无删减国产精品一区| 亚洲色一色噜一噜噜噜| 精品剧情v国产在免费线观看| 亚洲成人免费网站| a毛片全部播放免费视频完整18| 国产成人人综合亚洲欧美丁香花| 亚洲精品美女久久久久9999| 亚洲人成网亚洲欧洲无码久久| 亚洲Av无码乱码在线znlu| 最近免费中文字幕大全| 亚洲视频免费在线播放| 午夜免费啪视频在线观看 |