我有一个需要迭代的对象集合。该集合的大小可变。如果集合中有多个对象,我需要对对象2 ..无穷大进行特殊处理。
这样做的首选方法是什么?例如:
int count = 1;
for (CustomObject co : CustomObjectCollection) {
methodAll(co);
if(count > 1) {
methodSpecial(co);
}
count = count++;
}
答案 0 :(得分:5)
如果您没有特别需要跟踪计数,也可以使用布尔标记。
boolean first = true;
for (CustomObject co : CustomObjectCollection) {
methodAll(co);
if (!first) {
methodSpecial(co);
}
first = false;
}
使用哪个取决于您的具体用例。假设您不打算优化每个最后一次每秒操作的性能,那么选择声明您意图的选项:
count++
(根据路易斯答案,它是count++
,而不是count = count++
)for(int i = 0; i < collection.size(); i++)
操作,get(i)
也很好。这也允许您通过将int i
初始化为其他索引来跳过第一项。如果您不希望额外的计数变量挂在循环外,可能会使用它。boolean first = true;
(或反boolean notFirst = false;
)突出显示subList
是一个不错的选择如果需要考虑性能,那么根据您的平台和实施来衡量,但从一般经验来看,从最慢到最快,在第一个和最后一个之间的差异为<= 20x:
for(int i = 0; i < list.size() ; i++)
int size = list.size()
然后声明for(int i = 0; i < size; i++)
循环然而,这些速度结果取决于很多事情,除非性能是设计目标或已确定的问题与迭代器一起使用,直到你有理由使用其他两个中的一个 - 迭代器通常足够快。