2

我想知道防止以可扩展方式访问多个循环的最佳方法

String token;
ArrayList numbers;
ArrayList names;

for(String n : numbers){
   if(token.equals(n)){
      break;
   }
}

for(String n : names){
   if(token.equals(n)){
      break;
   }
}

如果我在第一个循环中发现命中,我想跳过访问第二个循环,但我想以可扩展的方式进行,因为也许稍后我将有 5 个列表

我想到的解决方案

  1. 在循环内进行多次返回,但这不是一个好的编程技术

  2. 设置一个标志并在其他循环中使用它(通过 if 条件或将其放在循环条件中,但是当我们有 5 个不同的列表时,这意味着我将有 5 个标志并检查我之前的循环。

我会很感激你的建议。谢谢

4

3 回答 3

4
public static boolean contains (Object element, Collection <?> ... collections)
{
    for (Collection c: collections)
        if (c.contains (element)) return true;

    return false;
}
于 2013-02-12T09:49:07.557 回答
1

如果您有重复项,那么使用 aSet或 Guava怎么样。MultiSetArrayList

然后你只需要做

        String token = "";
        Set<String> numbers = Sets.newHashSet();
        Set<String> names = Sets.newHashSet();
        if (numbers.contains(token)) {

        }
        else if (names.contains(token)) {

        }

在 a 上检查 forcontains(token)几乎总是Set比在 a 上更快List

于 2013-02-12T09:52:25.500 回答
0

您是否知道您可以标记循环,并将标记作为参数传递给breakorcontinue语句?

像这样:

mytag: for(int i =0; i < 10; i++){
  for(int j =0; j < 10; j++){
    if(done){
      break mytag;
    }
  }
}

这适用于switch,whiledo-while, 对于continuebreak

于 2013-02-12T09:55:21.973 回答