You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 17:25:06