这可能是一个随意且挑剔的问题,但我最近在Java中使用数组操作做了很多工作,我想知道是否在使用以下循环时:
for (Object obj : SomeArrayOrCollection) {
//do something
}
如果有办法访问某种序数而不做我通常做的事情(声明一个额外的变量并在每次循环运行时添加一个变量)或者我的同事做了什么(使用
List.indexOf(int i)
方法)?我觉得这两个都增加了相当多的开销。我知道我可以使用标准
for (declaration;condition;change) { }
循环,但在此项目的上下文中使用修改的for循环更加方便。所以,问题是,有没有办法访问你正在使用的对象的索引,而不需要像我上面那样采用更多内存密集型操作?
谢谢!
答案 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
接口。
答案 2 :(得分:1)
为了轻松访问像ArrayLists这样的集合,创建了for for循环。默认情况下,您无法在增强型for循环中访问索引。如果你想这样做,你将不得不使用常规for循环,即for(initialization; condition ; change )
,或者你可以在for循环外面声明一个变量并在其中增加
答案 3 :(得分:0)
不,没有。如果你需要索引,你能解释一下为什么循环标准如此不方便吗?
答案 4 :(得分:0)
实际上,不,我认为你通常做的是正确的事情。除非列表实现由哈希映射(我不期望)支持,否则使用indexOf肯定是错误的。