Array에 HashMap을 추가하는데 값이 제대로 안들어 갑니다.

조회수 437회
ArrayList<HashMap<String,String>> all_Button_list = new ArrayList<>();
HashMap<String, String> all_Button_hm = new HashMap<>();

for(int i=1;i<chain+1;i++){
            for(int j=1;j<y+1;j++){
                for(int k=1;k<x+1;k++){
                    all_Button_hm.clear();
                    all_Button_hm.put("index", i+" "+j+" "+k);
                    all_Button_list.add(all_Button_hm);
                }
            }
        }
Log.d("test",all_Button_list.toString());

일단 코드는 위와 같습니다. for문으로 돌면서 각각의 인덱스를 해시맵에 저장후 그 해시맵들을 나열하는 Array를 만들었는데요, for 다돌고 밑에 로그찍혀 나오는 것을 보면

[{index=5 8 8}, {index=5 8 8}, {index=5 8 8}, {index=5 8 8}, {index=5 8 8},...

식으로 나옵니다. 값이 다 똑같은 해시맵이 들어가 있습니다.

그래서 코드를 아래처럼 아예 HashMap 객체를 for문 돌때마다 새로 생성하니 일단 됩니다.

ArrayList<HashMap<String,String>> all_Button_list = new ArrayList<>();

for(int i=1;i<chain+1;i++){
            for(int j=1;j<y+1;j++){
                for(int k=1;k<x+1;k++){
                    HashMap<String, String> all_Button_hm = new HashMap<>();  //객체 for 돌때마다 생성
                    all_Button_hm.put("index", i+" "+j+" "+k);
                    all_Button_list.add(all_Button_hm);
                }
            }
        }
Log.d("test",all_Button_list.toString());
[{index=1 1 1}, {index=1 1 2}, {index=1 1 3}, {index=1 1 4}, {index=1 1 5}, {index=1 1 6},...

그러나 저렇게 객체를 계속 생성하면 성능에 문제가 되지는 않을까요? 또한 첫번째는 왜 작동이 이상하게 되는지 궁금합니다.

  • (•́ ✖ •̀)
    알 수 없는 사용자
  • 목적이 나와 있지 않아서 좋은 방법을 제시할수가 없습니다. 무엇을 하려고 작성한 코드인가요? 첫번째 코드에서의 문제는 all_Button_hm.clear() 를 하면 맵의 요소들을 모두 지웁니다. 즉 초기화가 되는데...지우고 넣고 지우고 넣고 반복하면 마지막 요소만 있게 됩니다. 정영훈 2020.1.12 18:26

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)