-5

这可能是一个随机且挑剔的问题,但我最近在 Java 中对数组操作做了很多工作,我想知道在使用以下循环时是否:

for (Object obj : SomeArrayOrCollection) {
    //do something
}

如果有任何方法可以访问某种序数而不做我通常做的事情(声明一个额外的变量并在每次循环运行时添加一个变量)或者我的一个同事做了什么(使用

List.indexOf(int i) 

方法)?我觉得这两个都增加了相当多的开销。我知道我可以使用一个标准

for (declaration;condition;change) { }

循环,但在这个项目的上下文中使用修改后的 for 循环要方便得多。所以,问题是,有没有什么方法可以访问你正在使用的对象的索引,而无需像我上面所说的那样使用更多的内存密集型操作?

谢谢!

4

5 回答 5

3

不,for-each 循环不会跟踪它们所在的索引,因为并非每个循环Iterable都是可索引的。例如,大多数Sets 没有顺序的概念,因此说“循环在第 n索引的元素上”是没有意义的。如果您想跟踪循环正在进行的迭代,那么您将需要按照您的建议使用计数器。

于 2013-06-29T13:12:17.590 回答
1

如果你想访问,index那么你可以使用

for (int i=0;i<SomeArrayOrCollection.length;i++) {
    //Here i is the index
}

通过使用 for each 您无法访问索引

原因是for-each循环内部没有计数器;它基于Iterable接口。

SEE HERE

于 2013-06-29T12:56:30.293 回答
1

修改后的 for 循环是为了轻松访问 ArrayLists 等集合而创建的。默认情况下,您无法在增强的 for 循环中访问索引。如果你想这样做,你将不得不使用传统的for循环,for(initialization; condition ; change )或者你可以在for循环之外声明一个变量并在里面增加它

于 2013-06-29T12:57:27.897 回答
0

不,没有。如果您需要索引,您能否解释为什么标准 for 循环如此不方便?

于 2013-06-29T12:56:57.667 回答
0

实际上,不,我认为您通常做的事情是正确的。使用 indexOf 绝对是错误的,除非列表实现由哈希映射支持(我不希望这样)。

于 2013-06-29T12:57:32.063 回答