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

时间:2015-02-25 20:58:02

标签: java for-loop arraylist

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

或者是否存在一种效率更高的完全不同的方法?

5 个答案:

答案 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;你不想在实践中这样做,但你可以(所有来自你的程序):

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