迭代java数组for循环时访问索引

时间:2013-06-29 12:54:11

标签: java control-structure

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

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

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

List.indexOf(int i) 

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

for (declaration;condition;change) { }

循环,但在此项目的上下文中使用修改的for循环更加方便。所以,问题是,有没有办法访问你正在使用的对象的索引,而不需要像我上面那样采用更多内存密集型操作?

谢谢!

5 个答案:

答案 0 :(得分:3)

不,for - 每个循环都不会跟踪它们所处的索引,因为并非每个Iterable都是可索引的。例如,大多数Set没有顺序概念,所以说“循环在具有n th 索引的元素上”是没有意义的。如果你想跟踪循环所在的 iteration ,那么你需要按照你的建议使用一个计数器。

答案 1 :(得分:1)

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

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

通过使用每个你无法访问索引

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

SEE HERE

答案 2 :(得分:1)

为了轻松访问像ArrayLists这样的集合,创建了for for循环。默认情况下,您无法在增强型for循环中访问索引。如果你想这样做,你将不得不使用常规for循环,即for(initialization; condition ; change ),或者你可以在for循环外面声明一个变量并在其中增加

答案 3 :(得分:0)

不,没有。如果你需要索引,你能解释一下为什么循环标准如此不方便吗?

答案 4 :(得分:0)

实际上,不,我认为你通常做的是正确的事情。除非列表实现由哈希映射(我不期望)支持,否则使用indexOf肯定是错误的。