2011-12-15 4 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

난 당신이 정말row.clear()에 세 다른 ArrayLists를 추가, 그래서 변경할 확신 : 당신은 왜 "에 원하는

row = new ArrayList<String>(); 

동일한 arraylist 행을 사용하여 값을 추가하십시오. " 왜 최상위 레벨 ArrayList에 기본적으로 같은 참조가 세 번 포함되기를 원하는지 알 수 없습니다. 왜 이 아닌가요?은 독립 목록을 참조하기를 원합니다.

ArrayList<String> row; 

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

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

같은

+0

내가 의미하는 바는 row1, row2 row3 등을 갖고 싶지 않았기 때문에 문제가 발생할 수있는 행이 얼마나 많은지 알 수 없었기 때문입니다. – Ricco

+0

@Ricco : 맞습니다 - 오브젝트 *와 * 변수 *. 이제 하나의 변수를 사용하고 있지만 그 수명 동안 세 가지 다른 값을 갖습니다. (필자는 "행 추가"부분을 별도의 메서드로 리팩터링하고 싶지만 더 많은 컨텍스트가 필요한 약간 다른 주제입니다.) –

0

사용 일 각 행에 대한 코드 변수에 필요하지 않습니다 이쪽으로. 사이클에 현재 추가 된 행에 대한

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

이이 방법으로 하나의 이름을 넣어 또는하지만,이 변수의 범위는 단지 내부 순환의 반복이 부여됩니다.