空列表错误

时间:2016-01-26 22:43:36

标签: java list

我有以下代码

sf.Open(shpfilename)

当我取消注释错误的行(第二个System.out)时,我得到 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; } 但如果我取消注释正确的行(第一个System.out),程序运行正常并获得正确的结果。为什么我的Index: 0, Size: 0 error列表在reservation循环后变空?

1 个答案:

答案 0 :(得分: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();
}

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