0

在一个用于学校作业的简单 Java 程序中,我没有使用任何线程(除非 Java 以某种方式优化了代码以使用它们)。为什么当我这样做的时候

java App < test.txt // correct result
java App < test.txt > ans.txt // 1 wrong result

然后我将 ArrayList 的使用切换到 Vector,它就可以工作了。我认为唯一的区别是同步?如果我不使用线程,为什么会得到不同的结果?错误结果的触发器似乎也只是> ans.txt输出重定向?但早些时候,我还注意到一些奇怪的地方,当我添加一些 println 与 none 时,我得到了不同的结果。

为什么是这样?当我不使用线程时,我希望从 ArrayList/Vector 获得相同的结果吗?我按照我的想法使用了 ArrayList,因为我不使用线程,我可以摆脱 ArrayList 吗?

更新

代码是https://gist.github.com/3720606。你试一试:

java SchedulingDeliveries < Subtask1.txt // should give wrong result

预期的答案是 Subtask1-ans.txt,可以尝试 diff ans.txt

然后尝试搜索并将ArrayList替换为Vector,然后再试一次。应该管用

4

1 回答 1

0

关于 ArrayMaxHeap 实现(通过研究您的代码并与您认为应该发生的情况进行比较来回答):

  • list调用时的大小会发生什么变化dequeue()

  • dequeue将一个元素从数组中的最后一个位置移动到“第一个”(不计算索引 0),然后调用shiftDown(1). 如果由于某种原因最终没有将其与另一个元素交换(可能是剩下的最后一个元素)queueIndex,被移动的元素会发生什么?shiftDown

于 2012-09-14T08:38:27.120 回答