>

TreeMap을 생성하고>모든 키에 대해 arraylist 값 (0,0)을 설정 한 다음 단일 키 값만 업데이트했습니다. 그러나 모든 키 값을 업데이트합니다. 다음은 간단한 코드입니다.

import java.util.*;
public class Test {
    public static void main(String[] args) {
        TreeMap<String, ArrayList<Integer>> treeMap = new TreeMap<>();
        String[] moduleList = {"apple", "orange", "grape"};
        ArrayList<Integer> emptyInitialArrayList = new ArrayList<>(Arrays.asList(0, 0));
        for (String tempModule : moduleList) {
            treeMap.put(tempModule, emptyInitialArrayList);
        }
        ArrayList<Integer> tempModuleMap = treeMap.get("apple");
        tempModuleMap.set(0, tempModuleMap.get(0) + 1);
        for (Map.Entry<String, ArrayList<Integer>> test : treeMap.entrySet()) {
            System.out.println(test.getKey());
            System.out.println(test.getValue().get(0));
            System.out.println(test.getValue().get(1));
        }
    }
}

이 코드의 출력 :

apple
1
0
grape
1
0
orange
1
0

뭔가가 없습니다. 내가 실수 한 곳을 찾을 수 없습니다.

  • 답변 # 1

    각 임시 모듈마다 새로운 빈 초기 배열 목록을 추가해야합니다.

     for (String tempModule : moduleList) {
            ArrayList<Integer> emptyInitialArrayList = new ArrayList<>(Arrays.asList(0, 0));
            treeMap.put(tempModule, emptyInitialArrayList);
        }
    
    

    코드는 현재 맵의 각 키에 대해 동일한 배열 목록 인스턴스를 넣습니다. 따라서 나중에 애플 키를 업데이트 할 때 다른 키에도 변경 사항이 적용됩니다.

  • 답변 # 2

    고치려면 새 ArrayList 호출을 루프에 넣으십시오. 그렇지 않으면 모든 키에서 동일한 값의 객체를 공유하고 있습니다

       String[] moduleList = {"apple", "orange", "grape"};
        for (String tempModule : moduleList) {
            ArrayList<Integer> emptyInitialArrayList = new ArrayList<>(Arrays.asList(0, 0));
            treeMap.put(tempModule, emptyInitialArrayList);
        }
    
    

관련 자료

  • 이전 XCUITest 서로 참조하여 탭 위치를 찾는 방법
  • 다음 Jenkins Pipeline의 Docker Container가 몇 초 후에 죽습니다