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

Java中能否创建存储ArrayList的数组,且ArrayList存3元素字符串数组?

解决方案

你想要的嵌套结构完全可以实现,原代码的问题主要出在数组初始化错误和未初始化ArrayList实例,以下是修正后的实现:

核心问题分析

  1. 你需要的是长度为10的一维数组,每个元素是ArrayList<String[]>,但原代码写成了二维数组new ArrayList<String[]>[10][3],不符合需求
  2. 数组中的每个ArrayList对象没有被初始化,直接赋值会抛出NullPointerException
  3. 循环中stationsString = metrolines[0][2]固定取第一行数据,应该根据循环变量j取对应线路的数据

修正后的代码

// 初始化长度为10的数组,每个元素是ArrayList<String[]>
// Java不允许直接创建泛型数组,需强制类型转换
ArrayList<String[]>[] metroMap = (ArrayList<String[]>[]) new ArrayList[10];

// 给数组中的每个位置初始化ArrayList实例
for (int j = 0; j < 10; j++) {
    metroMap[j] = new ArrayList<>();
    String stationsString = metrolines[j][2]; // 取当前线路的字符串数据
    // 注意:如果occurences返回的是逗号数量,车站总数是逗号数+1,根据实际逻辑调整
    int stationCount = occurences(metrolines[j][2], ',') + 1;
    for (int i = 0; i < stationCount; i++) {
        // 创建长度为3的字符串数组存储单条车站数据
        String[] station = new String[3];
        
        // 处理车站名称和可见性标记
        if (stationsString.charAt(0) == '*') {
            station[0] = stationsString.substring(1, stationsString.indexOf(' '));
            station[2] = "Visible";
        } else {
            station[0] = stationsString.substring(0, stationsString.indexOf(' '));
            station[2] = "Invisible";
        }
        stationsString = stationsString.substring(stationsString.indexOf(' ') + 1);
        
        // 处理坐标信息
        if (stationsString.indexOf(' ') != -1) {
            station[1] = stationsString.substring(0, stationsString.indexOf(' '));
            stationsString = stationsString.substring(stationsString.indexOf(' ') + 1);
        } else {
            station[1] = stationsString;
        }
        
        // 将车站数据添加到当前线路的ArrayList中
        metroMap[j].add(station);
    }
}

关键说明

  • 数组初始化:由于Java泛型的限制,不能直接创建ArrayList<String[]>类型的数组,需先创建非泛型的ArrayList数组,再强制转换为泛型类型
  • ArrayList实例化:必须给数组的每个位置单独创建ArrayList<String[]>对象,否则会出现空指针异常
  • 数据匹配:循环中使用metrolines[j][2]获取对应线路的数据,保证每条线路的处理逻辑对应正确的数据源
  • 数量计算:如果occurences方法统计的是字符串中逗号的个数,那么实际车站数量是逗号数+1,需根据你的occurences实现逻辑调整stationCount的值

内容的提问来源于stack exchange,提问作者KrcnHc

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 18:23:14