如果您有一个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);
}
或者是否存在一种效率更高的完全不同的方法?
答案 0 :(得分:5)
在java中无法进行动态元编程。根据你想要达到的目标,会有各种选择。
如果您尝试分批处理5个项目,那么最干净的解决方案就是您现在使用的解决方案。如果代码重复困扰你,就像困扰我一样,那么你正在研究Views in Java Collections Framework,特别是&#34;查看某个集合的一部分&#34;部分:
List<String> nextFive = list.subList(5, 10);
答案 1 :(得分:3)
您可以拥有一个大小为6的String
数组并执行以下操作:
String[] str = new String[6];
for(int i=0; i<str.length; i++)
a[i] = al.get(i);
答案 2 :(得分:2)
如果你试图在本地堆栈上动态地创建变量,你需要两种方式使用反射(如果它甚至可能,我认为不是这样),否则它将无法编译然后我会坚持使用 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
答案 3 :(得分:1)
为什么不直接遍历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个对象。
答案 4 :(得分:1)
&#34;或者&#34;你不想在实践中这样做,但你可以(所有来自你的程序):
String x1 = ...
)作为适当的类写入*.java
文件(根据需要进行调整)*.class
文件*.class
文件中的类加载到您的程序中并使用它