티끌모아 태산

ArrayList에서 .add하면 모든 row의 값이 동일하게 입력되는 문제 본문

코딩/JavaScript

ArrayList에서 .add하면 모든 row의 값이 동일하게 입력되는 문제

yesman9 2022. 3. 11. 20:52

 

setVertexList(new_row)함수에서 발생한 문제였다.

 

처음에는 new_row.clear()로 초기화를 했다고 생각했다.

new_row.clear()는 값은 비워주었지만 계속 같은 주소를 가리키고 있기때문에

이후에 다른 데이터를 집어넣으면 그 데이터만을 가리키게된다.

 

따라서 new연산자를 이용해 새로운 객체를 생성해줘야하는 문제였다.

ArrayList<ArrayList<String>> newData = new ArrayList<ArrayList<String>>(); //truckPath table에 들어갈 전체 data
ArrayList<String> new_row = null; //truckPath table의 row한 개
CSVRecord cur_row = null; //csv파일에서 현재 읽은 row
CSVRecord pre_row = null; //csv파일에서 이전에 읽은 row

private static voud runThis(){
    for (int row = 0; row < records.size(); row++) {
        cur_row = records.get(row);
        if (cur_row.get(2).equals(pre_row.get(2))) {
        	updateNewRow(new_row, cur_row);
            setVertexList(new_row);
            newData.add(new_row); // 현재 row를 newData에 add
        }
    }
}

private static ArrayList<String> setNewRow(ArrayList<String> new_row, CSVRecord cur_row) {
    //new_row.clear()
    new_row = new ArrayList<String>();
    new_row.add(cur_row.get(0)); // uid
    new_row.add("[" + cur_row.get(5) + ", " + cur_row.get(6) + "]"); // vertexList
    new_row.add(cur_row.get(1)); // startTime
    new_row.add(cur_row.get(1)); // endTime
    new_row.add(cur_row.get(1).split(" ")[0]); // regDate
    new_row.add(cur_row.get(2)); // groupId
    return new_row;
}

private static ArrayList<String> updateNewRow(ArrayList<String> new_row, CSVRecord cur_row) {
    // vertexList += 새 좌표
    String vertexList = new_row.get(1);
    vertexList += ",[" + cur_row.get(5) + ", " + cur_row.get(6) + "]";
    new_row.set(1, vertexList);

    // endTime설정
    new_row.set(3, cur_row.get(1));
    return new_row;
}

 

 

여기서 해답을 얻을 수 있었다.

https://okky.kr/article/32171

 

OKKY | ArrayList에서 add 할때 이상하게 들어가는거 같은데 봐주세요

while( rs.next()){ row[0] = rs.getString(

okky.kr