分享
 
 
 

java中关于优先级队列的实现

王朝学院·作者佚名  2009-12-01
窄屏简体版  字體: |||超大  

这几天一直在搞关于优先级队列的实现,因为要考虑到线程的安全,所以PriorityQueue就不适用了。一个非常简单的实现方法,那就是把优先级比较好的插入一个队列,优先级低的插入另一个队列,取数的时候先在优先级高的队列上取数。这有个缺点就是如果优先级别越多的话,队列就越多。

因为要线程安全,队列采用 ConcurrentLinkedQueue 这个线程安全的,而api文档上说ConcurrentLinkedQueue 采用了有效的“无等待 (wait-free)”算法,所以它的吞吐量是很不错的!

简单代码如下:

package test;

import java.util.concurrent.ConcurrentLinkedQueue ;

public class PriorityQueueTest {

public static void main(String[] args) {

ConcurrentLinkedQueue <String> highPriority = new ConcurrentLinkedQueue <String>(); //高优先级

ConcurrentLinkedQueue <String> lowPriority = new ConcurrentLinkedQueue <String>(); //低优先级

highPriority.add( "aaa" );

highPriority.add( "bbb" );

highPriority.add( "111" );

lowPriority.add( "ccc" );

lowPriority.add( "ddd" );

lowPriority.add( "222" );

int i = 0 ,j = 0 , k= 0 ;

while ( true ){

while ( true ){

if (!highPriority.isEmpty()){

System.out.print(highPriority.remove());

i++;

k++;

System.out.println( ", i = " +i+ ", k=" +k);

break ;

}

if (!lowPriority.isEmpty()){

System.out.print(lowPriority.remove());

j++;

k++;

System.out.println( ", j = " +j+ ", k=" +k);

break ;

}

break ;

}

try {

Thread.sleep( 100 );

} catch (InterruptedException e) {

e.printStackTrace();

}

}

}

}

还有一种是,通过继承PriorityQueue 并实现Comparable接口,然后自已重写过compareTo方法就能实现很强大的优先级队列了,不过缺点是线程不安全的!

代码如下:

package test;

import java.util.PriorityQueue;

public class PriorityTest extends PriorityQueue<PriorityTest.Test>{

static class Test implements Comparable<Test>{

String packet;

int priotity;

public Test(String packet, int priotity) {

this .packet = packet;

this .priotity = priotity;

}

public int compareTo(Test arg) {

if (priotity < arg.priotity)

return 1 ;

else if (priotity > arg.priotity)

return - 1 ;

else

return 0 ;

}

public String toString(){

return packet;

}

}

public void add(String str, int priority){

super .add( new Test(str,priority));

}

public static void main(String args[]){

PriorityTest pTest = new PriorityTest();

pTest.add( "aaa" , 3 ); //优先级最高

pTest.add( "bbb" , 2 );

pTest.add( "ccc" , 1 );

while (!pTest.isEmpty()){

System.out.println(pTest.remove());

}

}

}

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有