Java / / 2022. 7. 15. 10:17

[Java] List<E> subList(int fromIndex, int toIndex);

반응형

 

List<E> subList(int fromIndex, int toIndex)란?

어떤 리스트의 구성 요소 중 fromindex에서 toindex까지의 요소를 새로운 배열로 반환해 준다.

 List<Integer> nums = new ArrayList<Integer>();
    for(int i=0; i<10; i++) {
        nums.add(i);
    }
    
    List<Integer> sub = nums.subList(2, 5);
    System.out.printf("nums: %s, sub: %s%n",nums, sub);

위 코드의 결과는 다음과 같다.

nums: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], sub: [2, 3, 4]

 

 


 

▶ 주의해야 할 점 1

반환된 리스트는 요소들만 따로 분리해서 만든 게 아니라 여전히 연결되어 있기 때문에 상호 간에 영향을 준다.

        List<Integer> nums = new ArrayList<Integer>();
        for (int i = 0; i < 10; i++) {
            nums.add(i);
        }

        List<Integer> sub = nums.subList(2, 5);
        System.out.printf("nums: %s, sub: %s%n", nums, sub);

        sub.add(100);  // sublist에 100 추가
        sub.remove(0); // sublist의 0번 요소 즉 2 삭제

        System.out.printf("nums: %s, sub: %s%n", nums, sub);

즉 위와 같은 코드에서 sublist에 값을 추가하고 삭제했는데 실행 결과를 보면 원본인 List의 구성 요소 역시 변경된 것을 알 수 있다.

nums: [0, 1, 3, 4, 100, 5, 6, 7, 8, 9], sub: [3, 4, 100]

 

▶ 주의해야 할 점 2

 

subList를 사용하다가 원본 리스트를 변경하게 되면 subList는 기존의 sublist는 더 이상 사용할 수 없게 된다.

nums.add(99);
        
System.out.printf("nums: %s%n", nums);  // nums: [0, 1, 3, 4, 100, 5, 6, 7, 8, 9, 99]
System.out.printf("sub: %s%n", sub);    // java.util.ConcurrentModificationException 발생

 

반응형
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유