2016-01-26 3 views
0

У меня есть следующий кодПустой список ошибок

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 но если я раскомментировать правильную линию (первый System.out) программа отлично работает и получает правильные результаты. Почему мой список reservation становится пустым после цикла while?

+1

Вы сохраняете очистку списка вместо создания нового списка для каждой записи. – JustinKSU

ответ

4

Не очищайте одиночный список, создайте новый экземпляр 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(); 
} 

В противном случае вы очищаете объект, который был добавлен в список бронирования сразу после добавления. Поймите, что ваш код постоянно добавляет один и тот же экземпляр singleList в список резервирования, а внутри цикла for заполняет этот единственный экземпляр и опустошает его в бесполезный цикл.

Смежные вопросы