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

如果你有一个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); } 

或者是否有一种完全不同的方法更有效?

在Java中不可能进行动态元编程。 根据您要实现的目标,可以有多种选择。

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

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

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

 String[] str = new String[6]; for(int i=0; i 

如果你试图在本地堆栈上动态创建变量,你需要使用reflection两种方式(如果它甚至可能,我认为不是这样),否则它将无法编译然后我会坚持使用经验法则除非你需要,否则不要优化

如果您尝试创建对变量的引用,则可以使用地图

 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 

为什么不直接遍历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个对象。

“也许”你不想在实践中这样做,但你可以(所有来自你的程序):

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