根据Coursera上的
Algorithms, Part 1,我正在写Java上的Deque课程.目前我的基于数组的Deque有方法removeLast():
public Item removeLast() {
if (size() == array.length / 4) {
resize(array.length / 2);
}
if (head != tail) {
Item tmp = array[--head];
array[head] = null;
return tmp;
}
throw new NoSuchElementException("Stack underflow");
}
如果head == tail意味着Deque是空的并且我根据作业规范抛出异常,在方法结束时而不是return语句.这段代码给出了关于不变量的直接意图(head!= tail).
另一方面,方法可能会像这样重写:
public Item removeLastRewritten() {
if (size() == array.length / 4) {
resize(array.length / 2);
}
if (head == tail) {
throw new NoSuchElementException("Stack underflow");
}
Item tmp = array[--head];
array[head] = null;
return tmp;
}
在我看来,removeLast由以下原因更清楚地写出来:
>坚持悲观的情景 – 总是失败,只有……这是更可靠的方法,特别是当方法代码会扩大并变得更加复杂时.
>在不变尾巴!=头部和后续if {}代码块之间提供更清晰的链接.
我有以下问题:
>哪种方法更好?
>像removeLast这样的写法被认为是一种合适/好的做法吗?
>什么被认为是Java的最佳实践?是否有任何代码风格(我找不到)?