Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java PriorityQueue.poll();_Java_Algorithm_Integer_Queue_Priority Queue - Fatal编程技术网

Java PriorityQueue.poll();

Java PriorityQueue.poll();,java,algorithm,integer,queue,priority-queue,Java,Algorithm,Integer,Queue,Priority Queue,是否有人对修改对象的compareTo函数的最佳方式有任何建议,以便在调用父优先级队列的“poll()”函数时返回最低的非负值,而不是通常的最低值 比如说,我们有一个数字类,它存储任何数字,负数或非负数,但是如果该类的对象是负数,我不希望返回该类对象的数据。将队列包装在包装器对象中,并且永远不要添加负值。然后,您可以正常使用队列,知道最低值将是非负值 这是一份草稿。我没有编译它或其他什么,但这是一个想法。这里有一个例子 import java.util.*; class PositiveQueu

是否有人对修改对象的compareTo函数的最佳方式有任何建议,以便在调用父优先级队列的“poll()”函数时返回最低的非负值,而不是通常的最低值


比如说,我们有一个数字类,它存储任何数字,负数或非负数,但是如果该类的对象是负数,我不希望返回该类对象的数据。

将队列包装在包装器对象中,并且永远不要添加负值。然后,您可以正常使用队列,知道最低值将是非负值

这是一份草稿。我没有编译它或其他什么,但这是一个想法。这里有一个例子

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.

好的,让我们把事情整理一下:

  • 您想在队列中输入负数吗
  • 您不希望在取消元素排队时返回这些数字吗
  • 您还想对队列中的号码做些什么,但这些号码将永远不会离开队列
  • 顺便说一句,Java中的队列只能容纳对象,因此可以使用
    null
    而不是其他神奇的值


    我假设您需要在实现中允许重复的值。如果没有,请看一看的实现。

    好的,让我们稍微整理一下:

  • 您想在队列中输入负数吗
  • 您不希望在取消元素排队时返回这些数字吗
  • 您还想对队列中的号码做些什么,但这些号码将永远不会离开队列
  • 顺便说一句,Java中的队列只能容纳对象,因此可以使用
    null
    而不是其他神奇的值


    我假设您需要在实现中允许重复的值。如果没有,请查看的实现。

    是否没有办法简单地修改Number类的compareTo以确保不返回负值?我确实希望队列存储负值;我只是不希望它在寻找最小的数字时返回负值。不。为什么要修改数字的比较?你不想改变他们在整个系统内的比较方式,就在你的课堂上。存储负数时,您打算如何处理它们?那么您希望如何处理队列中的负值呢?@Edward问题仍然是一样的。你想如何处理负数?如果队列只有负数,那么是否应该返回一个?还是应该为空?如何从队列外部访问负数?它们是否应该包含在队列的大小中?你看,如果我们不想让他们出现,却让他们出现在队列中,那么这里有很多大问题需要解决@爱德华:那你最好不要用-1。相反,请使用
    Integer.MAX\u VALUE
    或其他非常大的数字。是否无法简单地修改number类的compareTo以确保不返回负值?我确实希望队列存储负值;我只是不希望它在寻找最小的数字时返回负值。不。为什么要修改数字的比较?你不想改变他们在整个系统内的比较方式,就在你的课堂上。存储负数时,您打算如何处理它们?那么您希望如何处理队列中的负值呢?@Edward问题仍然是一样的。你想如何处理负数?如果队列只有负数,那么是否应该返回一个?还是应该为空?如何从队列外部访问负数?它们是否应该包含在队列的大小中?你看,如果我们不想让他们出现,却让他们出现在队列中,那么这里有很多大问题需要解决@爱德华:那你最好不要用-1。相反,请使用
    Integer.MAX\u VALUE
    或其他非常大的数字。