Java新手求助:如何通过拼接变量名循环访问多个数组?
Java中动态遍历命名类似的数组的解决方案
Java里不能直接通过拼接变量名的方式(比如myArray+key)来访问数组,因为Java是静态类型语言,变量名在编译阶段就确定了,运行时没法通过字符串动态定位到对应的变量。不过有几种更规范的方式实现你想要的功能:
推荐方案:将数组统一存入容器
把所有myArray1到myArray10放到一个数组或者List里,直接遍历这个容器就能对应到每个子数组:
// 先把所有目标数组存入一个二维数组 String[][] allArrays = {myArray1, myArray2, myArray3, myArray4, myArray5, myArray6, myArray7, myArray8, myArray9, myArray10}; HashMap<Integer, ArrayList<String>> map = new HashMap<>(); for (int i = 0; i < allArrays.length; i++) { int key = i + 1; // 对应map的key从1到10 map.put(key, new ArrayList<>()); // 遍历当前子数组并添加到map对应的列表中 for (String item : allArrays[i]) { map.get(key).add(item); } }
这种方式逻辑清晰,代码简洁,是最符合Java编程习惯的做法。
备选方案:使用switch-case匹配
如果数组数量不多且固定,也可以用switch-case来手动匹配每个key对应的数组:
HashMap<Integer, ArrayList<String>> map = new HashMap<>(); int key = 1; while (key <= 10) { map.put(key, new ArrayList<>()); String[] currentArray; // 根据key匹配对应的数组 switch(key) { case 1: currentArray = myArray1; break; case 2: currentArray = myArray2; break; case 3: currentArray = myArray3; break; case 4: currentArray = myArray4; break; case 5: currentArray = myArray5; break; case 6: currentArray = myArray6; break; case 7: currentArray = myArray7; break; case 8: currentArray = myArray8; break; case 9: currentArray = myArray9; break; case 10: currentArray = myArray10; break; default: currentArray = new String[0]; // 兜底防止key超出范围 } // 遍历数组并添加到map for (String item : currentArray) { map.get(key).add(item); } key++; }
这种方式适合数组数量极少的场景,但数组多了代码会很冗余。
不推荐新手使用的反射方案
通过Java反射可以根据字段名动态获取数组,但反射操作复杂,容易出错,还会破坏代码的封装性,不建议新手使用,这里只做简单示例:
HashMap<Integer, ArrayList<String>> map = new HashMap<>(); int key = 1; while (key <= 10) { map.put(key, new ArrayList<>()); try { // 替换成你当前类的类名,比如如果是在Main类里就写Main.class Field field = YourClassName.class.getDeclaredField("myArray" + key); // 如果数组是静态的,get方法参数传null;非静态传当前对象this String[] currentArray = (String[]) field.get(this); for (String item : currentArray) { map.get(key).add(item); } } catch (NoSuchFieldException | IllegalAccessException e) { // 处理找不到字段或访问权限的异常 e.printStackTrace(); } key++; }
内容的提问来源于stack exchange,提问作者Marian Kay
相关产品推荐
相关产品推荐

