Java 类优先级队列的Can方法添加<;E>;返回错误?

Java 类优先级队列的Can方法添加<;E>;返回错误?,java,priority-queue,Java,Priority Queue,在oracle中的PriorityQueue类描述中,特别是关于方法add的描述中,该页面说明了add的返回值: 返回: true(由Collection.add(E)指定) 这是否意味着此方法总是返回true 提前谢谢 指向类说明的链接:如果单击文档中的链接,您将阅读关于返回值的说明: 确保此集合包含指定的元素(可选) 操作)。如果此集合由于 呼叫(如果此集合不允许重复和 已包含指定的元素。) 因此,返回值的约定是,它必须始终返回true,除非满足以下条件: 集合不允许重复项 元素已存在 Pr

在oracle中的PriorityQueue类描述中,特别是关于方法add的描述中,该页面说明了add的返回值:

返回: true(由Collection.add(E)指定)

这是否意味着此方法总是返回true

提前谢谢


指向类说明的链接:

如果单击文档中的链接,您将阅读关于返回值的说明:

确保此集合包含指定的元素(可选) 操作)。如果此集合由于 呼叫(如果此集合不允许重复和 已包含指定的元素。

因此,返回值的约定是,它必须始终返回true,除非满足以下条件:

  • 集合不允许重复项
  • 元素已存在

  • PriorityQueue
    是否允许重复?对因此,如果单击文档中的链接,您将阅读关于返回值的说明,则它永远不会返回
    false

    确保此集合包含指定的元素(可选) 操作)。如果此集合由于 呼叫(如果此集合不允许重复和 已包含指定的元素。

    因此,返回值的约定是,它必须始终返回true,除非满足以下条件:

  • 集合不允许重复项
  • 元素已存在

  • PriorityQueue
    是否允许重复?对因此,它永远不能返回
    false

    方法
    add
    定义为

    public boolean add(E e) {
        return offer(e);
    }
    
    public boolean offer(E e) {
        if (e == null)
            throw new NullPointerException();
        modCount++;
        int i = size;
        if (i >= queue.length)
            grow(i + 1);
        size = i + 1;
        if (i == 0)
            queue[0] = e;
        else
            siftUp(i, e);
        return true;
    }
    
    方法
    报价
    定义为

    public boolean add(E e) {
        return offer(e);
    }
    
    public boolean offer(E e) {
        if (e == null)
            throw new NullPointerException();
        modCount++;
        int i = size;
        if (i >= queue.length)
            grow(i + 1);
        size = i + 1;
        if (i == 0)
            queue[0] = e;
        else
            siftUp(i, e);
        return true;
    }
    
    所以你的问题的答案是肯定的。除非引发异常,否则当前实现始终返回
    true

    Collection#add
    的契约表示,如果调用导致此集合发生更改,则该方法返回“
    true
    ”。由于
    PriorityQueue
    不是最终类,它可能有子类,因此我们不能说“它永远不会返回
    false
    ”。我可以实施一个新的计划。我可能会提出一个
    PriorityQueue
    ,它拒绝特定值或根本不接受新值

    PriorityQueue<Integer> queue = new PriorityQueue<Integer>() {
      @Override
      public boolean add(Integer integer) {
        super.add(integer);
        return false;
      }
    };
    
    PriorityQueue queue=new PriorityQueue(){
    @凌驾
    公共布尔加法(整数){
    super.add(整数);
    返回false;
    }
    };
    
    方法
    add
    定义为

    public boolean add(E e) {
        return offer(e);
    }
    
    public boolean offer(E e) {
        if (e == null)
            throw new NullPointerException();
        modCount++;
        int i = size;
        if (i >= queue.length)
            grow(i + 1);
        size = i + 1;
        if (i == 0)
            queue[0] = e;
        else
            siftUp(i, e);
        return true;
    }
    
    方法
    报价
    定义为

    public boolean add(E e) {
        return offer(e);
    }
    
    public boolean offer(E e) {
        if (e == null)
            throw new NullPointerException();
        modCount++;
        int i = size;
        if (i >= queue.length)
            grow(i + 1);
        size = i + 1;
        if (i == 0)
            queue[0] = e;
        else
            siftUp(i, e);
        return true;
    }
    
    所以你的问题的答案是肯定的。除非引发异常,否则当前实现始终返回
    true

    Collection#add
    的契约表示,如果调用导致此集合发生更改,则该方法返回“
    true
    ”。由于
    PriorityQueue
    不是最终类,它可能有子类,因此我们不能说“它永远不会返回
    false
    ”。我可以实施一个新的计划。我可能会提出一个
    PriorityQueue
    ,它拒绝特定值或根本不接受新值

    PriorityQueue<Integer> queue = new PriorityQueue<Integer>() {
      @Override
      public boolean add(Integer integer) {
        super.add(integer);
        return false;
      }
    };
    
    PriorityQueue queue=new PriorityQueue(){
    @凌驾
    公共布尔加法(整数){
    super.add(整数);
    返回false;
    }
    };
    
    它可以返回true。它也可以抛出一个异常,在这种情况下,它不会返回任何东西。有趣的是,标题上写着“它能返回false吗?”在你的描述中,你会问,“它总是返回true吗?”所以如果有人回答“是”,那么他是对的。。。还是错了。。。取决于他回答的问题。你以后应该注意与你提问的方式保持一致。@Jim Mischel,谢谢你的评论。将注意到它,它可以返回true。它也可以抛出一个异常,在这种情况下,它不会返回任何东西。有趣的是,标题上写着“它能返回false吗?”在你的描述中,你会问,“它总是返回true吗?”所以如果有人回答“是”,那么他是对的。。。还是错了。。。取决于他回答的问题。你以后应该注意与你提问的方式保持一致。@Jim Mischel,谢谢你的评论。你忘了除了“抛出异常时”@Stultuske你是说抛出异常时方法返回
    false
    ?不,抛出异常时它既不返回true也不返回false。它抛出了一个例外@timcastelihns所说的话。您声明它必须始终返回true,除非它不允许重复并且它将是重复的。这是不完整的。如果抛出异常,它不会返回true,这是我的观点。@Stultuske如果函数返回,则返回的值总是相关的,因此我相信该语句与文档一样是自我解释的。您忘记了“抛出异常时”除外@Stultuske你是说当抛出异常时,方法返回
    false
    ?不,当抛出异常时,它既不返回true也不返回false。它抛出了一个例外@timcastelihns所说的话。您声明它必须始终返回true,除非它不允许重复并且它将是重复的。这是不完整的。如果抛出异常,它不会返回true,这是我的观点。@Stultuske如果函数返回,则返回的值总是相关的,因此我相信该语句与文档一样是自我解释的。嗨,Andrew,感谢您提供详细而彻底的答案!嗨,安德鲁,谢谢你详细而透彻的回答!