空列表错误

dio*_*231 0 java list

我有以下代码

    ArrayList<ArrayList<String>> reservation = new ArrayList<ArrayList<String>>();
    ArrayList<String> singleList = new ArrayList<String>();
    while (rs.next()){
        singleList.add(rs.getString("name"));
        singleList.add(rs.getString("type"));
        singleList.add(rs.getString("view"));
        singleList.add(rs.getString("service"));
        singleList.add(rs.getString("checkin"));
        singleList.add(rs.getString("date"));
        reservation.add(singleList);
        // correct line System.out.println(reservation.get(0).get(0));
        singleList.clear();
    }
    catch (Exception e) {
    e.printStackTrace();
    }
    // wrong lineSystem.out.println(reservation.get(0).get(0));
    return reservation;
}
Run Code Online (Sandbox Code Playgroud)

当我取消注释错误的行(第二个System.out)时,我得到一个 Index: 0, Size: 0 error但是如果我取消注释正确的行(第一个System.out),程序运行正常并得到正确的结果.为什么我的reservationList在while循环后变空?

Hov*_*els 5

不要清除singleList,循环中创建一个新的ArrayList实例.

List<List<String>> reservation = new ArrayList<>();
// ArrayList<String> singleList = new ArrayList<String>();
while (rs.next()){
    List<String> singleList = new ArrayList<>();
    singleList.add(rs.getString("name"));
    singleList.add(rs.getString("type"));
    singleList.add(rs.getString("view"));
    singleList.add(rs.getString("service"));
    singleList.add(rs.getString("checkin"));
    singleList.add(rs.getString("date"));
    reservation.add(singleList);
    // correct line System.out.println(reservation.get(0).get(0));
    // singleList.clear();
}
Run Code Online (Sandbox Code Playgroud)

否则,您将在添加后立即清除添加到预订列表中的对象.了解您的代码不断将相同的单个列表实例添加到预留列表中,并且在for循环内填充此单个实例并将其清空为无用循环.