我有以下代码
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
循环后变空?
答案 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循环中填充此单个实例并将其清空为无用循环。