我有以下代码
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循环后变空?
不要清除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循环内填充此单个实例并将其清空为无用循环.