<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, 評(píng)論 - 21, 引用 - 0
    數(shù)據(jù)加載中……

    java中關(guān)于優(yōu)先級(jí)隊(duì)列的實(shí)現(xiàn)

            這幾天一直在搞關(guān)于優(yōu)先級(jí)隊(duì)列的實(shí)現(xiàn),因?yàn)橐紤]到線程的安全,所以PriorityQueue就不適用了。一個(gè)非常簡單的實(shí)現(xiàn)方 法,那就是把優(yōu)先級(jí)比較好的插入一個(gè)隊(duì)列,優(yōu)先級(jí)低的插入另一個(gè)隊(duì)列,取數(shù)的時(shí)候先在優(yōu)先級(jí)高的隊(duì)列上取數(shù)。這有個(gè)缺點(diǎn)就是如果優(yōu)先級(jí)別越多的話,隊(duì)列就 越多。
            因?yàn)橐€程安全,隊(duì)列采用ConcurrentLinkedQueue這個(gè)線程安全的,而api文檔上說ConcurrentLinkedQueue采用了有效的“無等待 (wait-free)”算法,所以它的吞吐量是很不錯(cuò)的!
        簡單代碼如下:
    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>(); //高優(yōu)先級(jí)
    6.         ConcurrentLinkedQueue<String> lowPriority = new ConcurrentLinkedQueue<String>();  //低優(yōu)先級(jí)
    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并實(shí)現(xiàn)Comparable接口,然后自已重寫過compareTo方法就能實(shí)現(xiàn)很強(qiáng)大的優(yōu)先級(jí)隊(duì)列了,不過缺點(diǎn)是線程不安全的!
          代碼如下:
    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);  //優(yōu)先級(jí)最高
    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 石頭@ 閱讀(5527) 評(píng)論(1)  編輯  收藏 所屬分類: DS & Alg

    評(píng)論

    # re: java中關(guān)于優(yōu)先級(jí)隊(duì)列的實(shí)現(xiàn)  回復(fù)  更多評(píng)論   

    如果要線程安全的優(yōu)先級(jí)隊(duì)列不是有PriorityBlockingQueue么?不知道你用的哪個(gè)版本,不過jdk1.6里是有的
    2012-07-19 20:51 | 游刃

    只有注冊用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 中文字幕第一页亚洲| 亚洲AV无码一区二区三区在线| 久久免费观看国产精品| 亚洲婷婷天堂在线综合| 国产午夜免费秋霞影院| 免费无码作爱视频| 四虎必出精品亚洲高清| 中文字幕一精品亚洲无线一区| 18禁美女裸体免费网站| 高潮毛片无遮挡高清免费视频| 国产免费MV大全视频网站| 亚洲黄色免费电影| 国产美女被遭强高潮免费网站| 日本亚洲精品色婷婷在线影院 | 免费a级毛片高清视频不卡| 午夜在线亚洲男人午在线| 亚洲福利在线视频| 国产成人高清精品免费鸭子| 久久免费观看国产精品88av| 污视频网站免费在线观看| 亚洲精品永久www忘忧草| 亚洲伦乱亚洲h视频| 啦啦啦高清视频在线观看免费| 中文字幕的电影免费网站| 亚洲人成电影网站色| 亚洲狠狠综合久久| 亚洲国产精品视频| 性色av无码免费一区二区三区| 国产免费拔擦拔擦8X高清在线人| 亚洲av成本人无码网站| 亚洲乱码在线视频| 久久久久亚洲精品美女| 国产精品亚洲二区在线观看 | 国产大片免费天天看| 日本系列1页亚洲系列| 亚洲国产高清视频在线观看| 亚洲色精品vr一区二区三区| 国产成人精品免费视频软件| 久久不见久久见免费影院| 日本免费电影一区二区| 久久久久久久久久久免费精品|