마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

안드로이드 Arraylist 질문입니다

0 추천
 public ArrayList<ArrayList<SubjectClass>> sub_over(ArrayList<ArrayList<SubjectClass>> over_arrayList, int over) {
        int sum = 0;
        ArrayList<Integer> over_index = new ArrayList<Integer>();
        over_index.clear();
        for (int i = 0; i < over_arrayList.size(); i++) {
            for (int j = 0; j < over_arrayList.get(i).size(); j++) {
                sum += over_arrayList.get(i).get(j).hak;
            }
            if (sum < over) {
                if (!over_index.contains(i)) {
                    over_index.add(i);
                }
            }
            sum = 0;
        }

        Log.v("Arraysize", result.size() + "");
        for (int k = over_index.size() - 1; k >= 0; k--) {
            int tmpIndex = over_index.get(k);
            if (over_index.size() > 0) {
                over_arrayList.remove(tmpIndex);
            }
        }
        Log.v("Arraysize", result.size() + "");
        return over_arrayList;
    }

특정 조건인 arraylist를 제거 하려고 하는 소스인데요

매개변수로 받은 over_arrayList 를 remove 하는데

oncreate에서 생성한 result라는 arraylist의 사이즈가 변합니다

remove전 로그값과 remove후 로그값이 차이가있습니다

제가 어디를 변수를 잘못썻나 아무리 찾아봐도 모르겠습니다

어떤 가능성이있을까요?. .

익명사용자 님이 2016년 7월 9일 질문

1개의 답변

0 추천
제가 보기에는 위의 함수의 파라미터 값으로 result를 넘긴게 아닌가 싶습니다.

자바의 경우 객체를 파라미터로 전달할 때 레퍼런스를 전달 합니다 (Call by Reference를 생각 하시면 됩니다.)

즉 복제된 객체가 전달되는게 아니라 객체의 참조가 전달되어 해당 값을 변경시키면 전달된 파라미터의 원본도 변화가 됩니다.

위에서 말씀하신 result라는 값에 영향을 주지 않으시려면 clone 을 호출 하여 반환 된 값을 전달 하면 될 것 같습니다.
익명사용자 님이 2016년 7월 9일 답변
...