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