2011-12-15 3 views
1

Как использовать одну и ту же строку arraylist для добавления значений во вложенный массив tableValues, поскольку команда clear удаляет данные в строке.Java, добавляющий данные к вложенному массиву

Благодаря

ArrayList<ArrayList<String>> tableValues = new ArrayList<ArrayList<String>>(); 
    ArrayList<String> row = new ArrayList<String>(); 

    row.add("a"); 
    row.add("b"); 
    row.add("c"); 
    tableValues.add(row); 
    row.clear(); 

    row.add("d"); 
    row.add("e"); 
    row.add("f"); 
    tableValues.add(row); 
    row.clear(); 

    row.add("g"); 
    row.add("h"); 
    row.add("i"); 
    tableValues.add(row); 
    row.clear(); 

    System.out.println(tableValues); 

ответ

3

Я уверен, что вы действительно хотите добавить три различных ArrayLists, поэтому менять каждый row.clear() на:

row = new ArrayList<String>(); 

Почему вы хотите к " используйте ту же строку arraylist, чтобы добавить значения "? Я не понимаю, почему вы хотите, чтобы ваш верхний уровень ArrayList содержал одну и ту же ссылку три раза. Зачем вам не хотите, чтобы они были ссылками на независимые списки?

+0

Что я имел в виду, так это то, что я не хотел иметь row1, row2 row3 и т. Д., Так как я не знаю, сколько строк есть, так что это вызовет проблему :) – Ricco

+0

@ Ricco: Right - стоит отличать * объектов * и * переменных *. Теперь вы используете одну переменную, но она будет иметь три разных значения за всю свою жизнь. (У меня возникнет соблазн реорганизовать часть «добавить строку» в отдельный метод, но это немного другая тема, в которой мне понадобится больше контекста). –

0

использовать что-то вроде

ArrayList<String> row; 

row = new ArrayList<String>(); 
// fill row 
tableValues.add(row); 

row = new ArrayList<String>(); 
// fill row 
tableValues.add(row); 

Таким образом, вам не нужно в переменной кода для каждой строки. или положить его в цикле

while(codnition) { // or for or do {} while(condition); 
    List<String> row = new ArrayList<String>(); 
    // fill row 
    table.add(row); 
} 

Этот путь там одно имя для добавленного в данный момент строки, но объем этой переменной только внутри данной итерации цикла.

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