在循环的java数组上迭代时访问索引

在循环的java数组上迭代时访问索引,java,control-structure,Java,Control Structure,这可能是一个随机且吹毛求疵的问题,但我最近在Java中做了大量的数组操作工作,我想知道在使用以下循环时: for (Object obj : SomeArrayOrCollection) { //do something } 如果有任何方法可以访问某种序号,而不必像我通常做的那样,每次循环运行时声明一个额外变量并向其中添加一个变量,或者我的一位同事使用 List.indexOf(int i) 方法?我觉得这两个都会增加很多开销。我知道我可以用一个标准 for (declaratio

这可能是一个随机且吹毛求疵的问题,但我最近在Java中做了大量的数组操作工作,我想知道在使用以下循环时:

for (Object obj : SomeArrayOrCollection) {
    //do something
}
如果有任何方法可以访问某种序号,而不必像我通常做的那样,每次循环运行时声明一个额外变量并向其中添加一个变量,或者我的一位同事使用

List.indexOf(int i) 
方法?我觉得这两个都会增加很多开销。我知道我可以用一个标准

for (declaration;condition;change) { }
循环,但是在这个项目的上下文中使用修改后的for循环要方便得多。所以,问题是,有没有办法访问您正在处理的对象的索引,而不用像我上面提到的那样使用内存密集型操作

谢谢

如果要访问索引,则可以使用

for (int i=0;i<SomeArrayOrCollection.length;i++) {
    //Here i is the index
}
通过使用for each,您无法访问索引

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


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

修改for循环是为了方便访问像ArrayList这样的集合而创建的。默认情况下,您无法访问增强for循环中的索引。如果您想这样做,您必须使用常规for循环,即for初始化;条件更改,或者您可以在for循环外部声明一个变量,并在内部递增它实际上,不,我认为您通常所做的是正确的。使用indexOf肯定是错误的,除非列表实现由我不希望的哈希映射支持。

否,因为每个循环都不跟踪它们所在的索引,因为不是每个Iterable都是可索引的。例如,大多数集合都没有顺序的概念,所以说循环在具有第n个索引的元素上是没有意义的。如果您想跟踪循环正在进行的迭代,则需要按照您的建议使用计数器。

这里我没有看到任何内存密集型操作是的;那是一笔开销。但Java的foreach只是普通for构造之上的一个糖,所以您正在为想象中的问题而挣扎。使用“for”。这里什么是内存密集型?一般来说,你应该决定是需要couter还是对象。如果您同时需要这两个变量,您应该像您所说的那样使用一个额外的变量,因为没有内存密集型操作。它既不是修改的,也不是高级的,而是增强的。@MarkoTopolnik,谢谢您的建议:。我编辑