我有一个需要迭代的对象集合.该集合的大小可变.如果集合中有多个对象,我需要对对象2 ..无穷大进行特殊处理.
这样做的首选方法是什么?例如:
int count = 1;
for (CustomObject co : CustomObjectCollection) {
methodAll(co);
if(count > 1) {
methodSpecial(co);
}
count = count++;
}
Run Code Online (Sandbox Code Playgroud)
Lou*_*man 10
你有什么工作除了一个bug:count = count++什么都不做. count = count + 1会工作,或者count++,但是, count = count++是一个无操作.
如果您不需要特别跟踪计数,也可以使用布尔标志.
boolean first = true;
for (CustomObject co : CustomObjectCollection) {
methodAll(co);
if (!first) {
methodSpecial(co);
}
first = false;
}
Run Code Online (Sandbox Code Playgroud)
使用哪个取决于您的具体用例.假设您不打算优化每个最后一次操作的性能,那么请使用声明您的意图的选项:
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++)循环然而,这些速度结果取决于很多事情,除非性能是设计目标或已确定的问题与迭代器一起使用,直到您有理由使用其他两个中的一个 - 迭代器通常足够快.