Java PriorityQueue.poll();
是否有人对修改对象的compareTo函数的最佳方式有任何建议,以便在调用父优先级队列的“poll()”函数时返回最低的非负值,而不是通常的最低值Java PriorityQueue.poll();,java,algorithm,integer,queue,priority-queue,Java,Algorithm,Integer,Queue,Priority Queue,是否有人对修改对象的compareTo函数的最佳方式有任何建议,以便在调用父优先级队列的“poll()”函数时返回最低的非负值,而不是通常的最低值 比如说,我们有一个数字类,它存储任何数字,负数或非负数,但是如果该类的对象是负数,我不希望返回该类对象的数据。将队列包装在包装器对象中,并且永远不要添加负值。然后,您可以正常使用队列,知道最低值将是非负值 这是一份草稿。我没有编译它或其他什么,但这是一个想法。这里有一个例子 import java.util.*; class PositiveQueu
比如说,我们有一个数字类,它存储任何数字,负数或非负数,但是如果该类的对象是负数,我不希望返回该类对象的数据。将队列包装在包装器对象中,并且永远不要添加负值。然后,您可以正常使用队列,知道最低值将是非负值 这是一份草稿。我没有编译它或其他什么,但这是一个想法。这里有一个例子
import java.util.*;
class PositiveQueue<E extends Number> extends PriorityQueue<Number> {
public boolean offer(E e) {
if(isNegative(e)) return false;
return super.offer(e);
}
private static boolean isNegative(Number n) {
// add logic here
return n.intValue() < 0;
}
public static void main(String[] args) {
PositiveQueue<Short> q = new PositiveQueue<Short>();
q.offer((short)4);
q.offer((short)7);
q.offer((short)2);
q.offer((short)-5);
q.offer((short)5);
while(q.peek() != null) System.out.println(q.poll());
}
}
C:\Documents and Settings\glowcoder\My Documents>javac PositiveQueue.java
C:\Documents and Settings\glowcoder\My Documents>java PositiveQueue
2
4
5
7
import java.util.*;
类PositiveQueue扩展了PriorityQueue{
公共布尔报价(E){
如果(isNegative(e))返回false;
返回超级报价(e);
}
私有静态布尔值为负(数字n){
//在这里添加逻辑
返回n.intValue()<0;
}
公共静态void main(字符串[]args){
PositiveQueue q=新的PositiveQueue();
q、 报价((短)4);
q、 报价((短)7);
q、 报价((短)2);
q、 报价((短)-5;
q、 报价((短)5);
而(q.peek()!=null)System.out.println(q.poll());
}
}
C:\Documents and Settings\glowcoder\My Documents>javac PositiveQueue.java
C:\Documents and Settings\glowcoder\My Documents>java PositiveQueue
2.
4.
5.
7.
将队列包装在包装器对象中,不要添加负值。然后,您可以正常使用队列,知道最低值将是非负值
这是一份草稿。我没有编译它或其他什么,但这是一个想法。这里有一个例子
import java.util.*;
class PositiveQueue<E extends Number> extends PriorityQueue<Number> {
public boolean offer(E e) {
if(isNegative(e)) return false;
return super.offer(e);
}
private static boolean isNegative(Number n) {
// add logic here
return n.intValue() < 0;
}
public static void main(String[] args) {
PositiveQueue<Short> q = new PositiveQueue<Short>();
q.offer((short)4);
q.offer((short)7);
q.offer((short)2);
q.offer((short)-5);
q.offer((short)5);
while(q.peek() != null) System.out.println(q.poll());
}
}
C:\Documents and Settings\glowcoder\My Documents>javac PositiveQueue.java
C:\Documents and Settings\glowcoder\My Documents>java PositiveQueue
2
4
5
7
import java.util.*;
类PositiveQueue扩展了PriorityQueue{
公共布尔报价(E){
如果(isNegative(e))返回false;
返回超级报价(e);
}
私有静态布尔值为负(数字n){
//在这里添加逻辑
返回n.intValue()<0;
}
公共静态void main(字符串[]args){
PositiveQueue q=新的PositiveQueue();
q、 报价((短)4);
q、 报价((短)7);
q、 报价((短)2);
q、 报价((短)-5;
q、 报价((短)5);
而(q.peek()!=null)System.out.println(q.poll());
}
}
C:\Documents and Settings\glowcoder\My Documents>javac PositiveQueue.java
C:\Documents and Settings\glowcoder\My Documents>java PositiveQueue
2.
4.
5.
7.
好的,让我们把事情整理一下:
null
而不是其他神奇的值
我假设您需要在实现中允许重复的值。如果没有,请看一看的实现。好的,让我们稍微整理一下:
null
而不是其他神奇的值
我假设您需要在实现中允许重复的值。如果没有,请查看的实现。是否没有办法简单地修改Number类的compareTo以确保不返回负值?我确实希望队列存储负值;我只是不希望它在寻找最小的数字时返回负值。不。为什么要修改数字的比较?你不想改变他们在整个系统内的比较方式,就在你的课堂上。存储负数时,您打算如何处理它们?那么您希望如何处理队列中的负值呢?@Edward问题仍然是一样的。你想如何处理负数?如果队列只有负数,那么是否应该返回一个?还是应该为空?如何从队列外部访问负数?它们是否应该包含在队列的大小中?你看,如果我们不想让他们出现,却让他们出现在队列中,那么这里有很多大问题需要解决@爱德华:那你最好不要用-1。相反,请使用
Integer.MAX\u VALUE
或其他非常大的数字。是否无法简单地修改number类的compareTo以确保不返回负值?我确实希望队列存储负值;我只是不希望它在寻找最小的数字时返回负值。不。为什么要修改数字的比较?你不想改变他们在整个系统内的比较方式,就在你的课堂上。存储负数时,您打算如何处理它们?那么您希望如何处理队列中的负值呢?@Edward问题仍然是一样的。你想如何处理负数?如果队列只有负数,那么是否应该返回一个?还是应该为空?如何从队列外部访问负数?它们是否应该包含在队列的大小中?你看,如果我们不想让他们出现,却让他们出现在队列中,那么这里有很多大问题需要解决@爱德华:那你最好不要用-1。相反,请使用Integer.MAX\u VALUE
或其他非常大的数字。