问个java中有关优先队列的问题,求高手!

代码太长,截出问题的一段问一下:publicTree(char[]alist,int[]blist)throwsException{PriorityQueuepq=new... 代码太长,截出问题的一段问一下:
public Tree(char[] alist, int[] blist) throws Exception {
PriorityQueue pq=new PriorityQueue();
for(int n=1;n<=26;n++){
pq.offer(new PriorityQData(alist[i],blist[i]));
}
char min1=pq.poll();
最后问题出在上面的最后一句上,我想把pq队列的首元素提出,并把其data值赋给min1这个char型变量,但是最后问题为“不兼容的类型”,我min1的类型是char,pq.poll()取出的值是alist中的,也是char型,为什么类型不兼容?
展开
 我来答
darkads2012
2013-12-13 · TA获得超过577个赞
知道小有建树答主
回答量:295
采纳率:0%
帮助的人:318万
展开全部
pq.offer(new PriorityQData(alist[i],blist[i]));这个是向优先队列中的插入语句

你插入的是PriorityQData数据类型,这个应该是你自己定义的数据类型吧
那么pq.poll()返回的也应该是PriorityQData,而不是char,所以会出现:不兼容的类型
追问
是的,PriorityQData是优先队列中每个结点的类,里面有两个变量,PriorityQData(elem,priority),一个是这个结点存放的值,一个是它的优先级

那请问要怎么改才能让这个解决这个错误?
追答
PriorityQData pData = pq.poll();
char min1 = pData.getElem();

 不知道你的这段代码究竟想要实现的功能是什么,我只能猜一下:

将字符数组alist中的字符按照blist中指定的优先级放入优先队列中,每次取出优先级最大或最小的字符。

PriorityQueue 的优先级是不需要指定的,或者说它指定的方式是通过设置比较器Comparator来实现的,如果没有指定则使用默认的自然顺序,如果加入的元素是int型,直接比较大小,最小的放在最前面,如果是对象,并且该对象没有比较器,则使用对象地址的大小

所以你的这段代码很可能达不到预想的功能

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式