有没有更有效的方法在 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" 你不想在实践中这样做,但你可以(全部在你的程序中):
- 将盒装源代码 (
String x1 = ...
) 作为适当的 class 写入 *.java
文件(根据需要进行调整)
- 运行 Java编译器导出对应的
*.class
文件
- class-将
*.class
文件中的 class 加载到您的程序中并使用它
如果您有一个 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" 你不想在实践中这样做,但你可以(全部在你的程序中):
- 将盒装源代码 (
String x1 = ...
) 作为适当的 class 写入*.java
文件(根据需要进行调整) - 运行 Java编译器导出对应的
*.class
文件 - class-将
*.class
文件中的 class 加载到您的程序中并使用它