带Locate的ArrayList中的Java ForEach

带Locate的ArrayList中的Java ForEach,java,for-loop,arraylist,foreach,Java,For Loop,Arraylist,Foreach,概述: 我使用for each循环,我很好奇是否需要将它们替换为常规for循环,或者是否有方法在ArrayList中进行定位,这将相当于跟踪正常for循环中使用的索引 问题的简化版本: 我将for each与对象的ArrayList一起使用。这些对象用于在不同的时间计算不同的值,因此我需要遍历这些项并在不同的时间进行计算。我希望在一个结构中跟踪这些结果,如果我可以在ArrayList中找到项目(而不必在单独的循环中遍历所有内容),我可以很容易地做到这一点。如果有,那么我可以用它来构建我所需要的。

概述:

我使用for each循环,我很好奇是否需要将它们替换为常规
for
循环,或者是否有方法在
ArrayList
中进行定位,这将相当于跟踪正常
for
循环中使用的索引

问题的简化版本:


我将for each与对象的
ArrayList
一起使用。这些对象用于在不同的时间计算不同的值,因此我需要遍历这些项并在不同的时间进行计算。我希望在一个结构中跟踪这些结果,如果我可以在
ArrayList
中找到项目(而不必在单独的循环中遍历所有内容),我可以很容易地做到这一点。如果有,那么我可以用它来构建我所需要的。如果没有,我将用
for
循环替换for-each,并获得所需的功能。

for-each循环是对集合或数组中的每个元素进行操作的简单方法。如果您想要迭代并跟踪标记,您将需要一个正常的
for
循环

但是,一些
集合
(例如
列表
s)有一个
indexOf()
方法,可用于获取索引。那会毁了你的表演

您还可以使用计数器:

int i = 0;
for (Object o : list) {
    // Code
    i++;
}

每个循环的
是一种对集合或数组中的每个元素进行操作的简单方法。如果您想要迭代并跟踪标记,您将需要一个正常的
for
循环

但是,一些
集合
(例如
列表
s)有一个
indexOf()
方法,可用于获取索引。那会毁了你的表演

您还可以使用计数器:

int i = 0;
for (Object o : list) {
    // Code
    i++;
}
您可以对
-循环使用常规的
,但有时这不是一个好主意,例如,如果您处理的是索引中元素检索为O(n)的链表。为什么不直接跟踪索引呢

int index = 0;
for (Element e : list) {
    ...
    index++;
}
我发现它比普通的
for
-循环更干净,而且即使您从
数组列表
更改为另一种非随机访问的列表类型,它仍将保持高效。

您可以使用常规的
for
-循环,但有时这不是一个好主意,例如,如果您处理的是索引中元素检索为O(n)的链表。为什么不直接跟踪索引呢

int index = 0;
for (Element e : list) {
    ...
    index++;
}

我发现它比普通的
for
-循环更干净,即使您从
ArrayList
更改为另一种非随机访问的列表类型,它仍将保持高效。

如何找到它们
indexOf()
?对于复杂对象,要根据特定成员在
列表中定位元素,可以重写参数化类中的
equals
方法,以与特定对象(例如id成员)匹配。然后,
yourList.contains(新的yourlclass(4))。它不适用于所有情况,但应该很有用。@SotiriosDelimanolis,这正是我所需要的,谢谢。@VenomFangs我不知道您想做什么,但根据列表的大小和列表中对象的类型,indexOf可能是一个相当昂贵的操作。@VenomFangs您还有
lastIndexOf
,如果需要获取元素的最后一个匹配项,如何找到它们
indexOf()
?对于复杂对象,要根据特定成员在
列表中定位元素,可以重写参数化类中的
equals
方法,以与特定对象(例如id成员)匹配。然后,
yourList.contains(新的yourlclass(4))。它不适用于所有情况,但应该很有用。@SotiriosDelimanolis,这正是我所需要的,谢谢。@VenomFangs我不知道您想做什么,但根据列表的大小和列表中对象的类型,indexOf可能是一个相当昂贵的操作。@VenomFangs您还有
lastIndexOf
,如果你需要得到一个元素的最后一次出现,这将以最少的代码更改提供我所需要的,并且将降低操作成本。Thx.@没问题,很高兴我能帮上忙。这可以用最少的代码更改来满足我的需要,而且操作成本也很低。谢谢。没问题,很高兴我能帮忙。