我正在浏览有关continue
关键字的问题,以便更好地了解它,我偶然发现了这一行in this answer
这些可以是维护时间弹,因为“继续”/“中断”与循环之间没有直接联系,而是继续/打破除上下文之外的循环;
我有这个for循环:
for(Object obj : myArrayList){
if(myArrayList.contains(someParticularData)){
continue;
}
//do something
}
现在,我的问题是 - 以我上面的方式使用continue
还是有任何问题可以吗?如果是,我可以采用的替代方法是什么?任何形式的指导都会有所帮助。谢谢。
更新:在这种情况下,我的目标是迭代Collection
(在这种情况下为ArrayList
),并检查是否包含某些特定数据和如果它是真的,跳过该迭代。
有人指出myArrayList.contains(someParticularData)
是一次性操作,最好在循环外执行检查,这正是我所寻求的。另外,我了解到,如果我可以根据某些条件continue
使用if(someConditon)
,我可以使用if(!someCondition)
完全避免使用{。}}。
答案 0 :(得分:15)
for(Object obj : myArrayList){
if(someCondition){
continue;
}
//do something
}
可以替换为:
for(Object obj : myArrayList){
if(!someCondition){
//do something
}
}
恕我直言,如果您没有太多(例如2-3 continue
/ break
/ return
),维护将没有问题。
答案 1 :(得分:14)
此代码少用
for(Object obj : myArrayList) {
// You're checking again and agian the condition that's loop independent
if(myArrayList.contains(someParticularData)){
continue;
}
//do something
}
更有效的实现是(首先检查你是否需要循环 )
if (!myArrayList.contains(someParticularData))
for(Object obj: myArrayList) {
//do something
}
继续在以下条件下很方便:
for(Object obj : myArrayList) {
// Check for each item: do we need to proceed this item
if (someArrayList.contains(obj))
continue;
//do something
}
答案 2 :(得分:1)
无论何时循环某个值范围,您都要处理初始值和最终值之间的每个值......
例如,如果您要添加奇数。 使用循环是很方便的,循环将增加2而不是为每个奇数值继续,
for (int i = 0; i < 100 ; i=i+2){
// do addition
}
但是如果要修改在循环中检查的值,则continue
或break
是实施的好方法。
例如,
boolean flag = false;
// flag will be modified in some iteration of loop, but you don't know which.
for ( int i = 0 ; i < 100 ; i++ ) {
if ( flag ) {
continue;
}
// flag modified somewhere..
}