有没有更有效的方法在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个对象。
“也许”你不想在实践中这样做,但你可以(所有来自你的程序):
- 将盒装源代码(
String x1 = ...
)作为适当的类写入*.java
文件(根据需要进行调整) - 运行Java编译器以派生相应的
*.class
文件 - 将类从该
*.class
文件加载到您的程序中并使用它