【发布时间】:2011-07-29 13:41:26
【问题描述】:
我继承了一堆代码,这些代码大量使用并行数组来存储键/值对。这样做实际上是有道理的,但是编写遍历这些值的循环有点尴尬。我真的很喜欢新的 Java foreach 构造,但似乎没有办法使用它来迭代并行列表。
使用普通的for 循环,我可以轻松做到这一点:
for (int i = 0; i < list1.length; ++i) {
doStuff(list1[i]);
doStuff(list2[i]);
}
但在我看来,这在语义上并不纯粹,因为我们没有在迭代期间检查 list2 的边界。是否有一些类似于 for-each 的巧妙语法可以用于并行列表?
【问题讨论】:
-
Re:语义纯度——您可以在迭代期间检查 list2 边界 (
(i < list1.length) && (i < list2.length)),或者如果您知道列表在迭代期间不会被修改,您可以在循环之前检查 @987654325 @ 和list2的长度相等,在这种情况下,您可以在迭代过程中不检查两者的界限,并且问心无愧。 -
如果一个线程修改了
list2而不是list1,那我就完蛋了。 -
就像我说的那样——“如果你知道列表在迭代过程中不会被修改”。而且,这不会让你比现在更糟。如果您不得不担心多个线程会访问这些列表,那么您需要担心的不仅仅是这个循环。
-
我不确定我的代码将来会适应哪些用例。我不想引入一个可能很难找到的错误。
-
+1 表示酷标题 :-)