有没有更有效的方法在 for 循环中创建新变量?

Is there a more efficient way to create new variables in a for loop?

如果您有一个 ArrayList(在本例中名为 al),并且您希望获取列表的前五个元素作为变量,您可以这样做:

    String x1 = al.get(0);
    String x2 = al.get(1);
    String x3 = al.get(2);
    String x4 = al.get(3);
    String x5 = al.get(4);

但是,使用 for 循环,有没有一种方法可以改为执行以下操作:

for (int i = 1; i < 6; i++){
    String namer = "x" + i.toString();
    String [value of String 'namer'] = al.get(i-1);
}

或者有没有更有效的完全不同的方法?

如果你试图在本地堆栈上动态创建变量,你将需要使用两种方式的反射(如果可能的话,我认为这是不可能的),否则它不会编译我会坚持 Don't optimize unless you need to

的经验法则

如果您尝试创建对变量的引用,您可以使用映射

Map variables = new HashMap();
for (int i = 1; i < 6; i++) {
    variables.put("x"+i, al.get(i-1));
}

然后就可以这样访问了

variables.get("x1"); //or x2,x3,x4

您可以有一个 String 大小为 6 的数组并执行以下操作:

String[] str = new String[6];
for(int i=0; i<str.length; i++)
    a[i] = al.get(i);

为什么不直接遍历 ArrayList 并在达到正确数量的变量时中断?

int i = 0;
for (Object obj : al) {
    if (i > 5) { break; }
    results.append(obj); // append the first five elements to the result
}

据我所知,这是最快的方法,因为我相信 get() 方法是 O(n)。所以显式写 get() 会提示 n!调用前 n 个对象。

java 中无法进行动态元编程。根据您要实现的目标,会有多种选择。

如果您尝试分批处理 5 个项目,最干净的解决方案就是您现在使用的解决方案。如果代码重复让你和我一样烦恼,那么你正在研究 Views in Java Collections Framework,特别是 "View of a portion of a collection" 部分:

List<String> nextFive = list.subList(5, 10);

"Perhaps" 你不想在实践中这样做,但你可以(全部在你的程序中):

  1. 将盒装源代码 (String x1 = ...) 作为适当的 class 写入 *.java 文件(根据需要进行调整)
  2. 运行 Java编译器导出对应的*.class文件
  3. class-将 *.class 文件中的 class 加载到您的程序中并使用它