Computer >> 컴퓨터 >  >> 프로그래밍 >> Java

Java에서 리스트의 하위 목록(sublist)을 찾는 방법과 예제 코드


이 글에서는 Java에서 리스트(List) 내부의 하위 목록(sublist)을 찾는 방법을 알아봅니다. 리스트는 요소를 순차적으로 저장하고 접근할 수 있는 순서가 있는 컬렉션으로, 인덱스 기반 메서드를 통해 요소를 삽입·수정·삭제·검색할 수 있으며 중복 요소도 허용합니다. 이러한 리스트의 일부분 또는 부분 집합을 하위 목록(sublist)이라고 합니다.

Java에서는 List 인터페이스가 제공하는 subList(int fromIndex, int toIndex) 메서드를 사용하면 간단하게 하위 목록을 추출할 수 있습니다. 이 메서드는 fromIndex(포함)부터 toIndex(미포함) 바로 앞까지의 요소들로 구성된 뷰(view)를 반환합니다.

아래는 전체 동작 과정을 보여주는 예시입니다.

입력값 −

Input list: [101, 102, 103, 104, 105, 106, 107, 108, 109]
Start Index: 3
End Index: 6

원하는 출력 결과 −

인덱스 3 위치부터 인덱스 6 위치 사이의 요소: [104, 105, 106]

알고리즘

Step 1 - 시작
Step 2 - 정수형 리스트 input_list를 선언한다.
Step 3 - 값을 정의한다.
Step 4 - subList(3, 6) 함수를 사용해 인덱스 3부터 6 사이의 하위 목록을 생성한다.
Step 5 - 결과를 출력한다.
Step 6 - 종료한다.

예제 1: main 함수에서 모든 작업 처리하기

아래 예제에서는 모든 연산을 하나의 main 함수 안에서 처리합니다.

import java.util.LinkedList;
import java.util.List;

public class Demo {
   public static void main(String[] args) {
      int index_start = 3;
      int index_end = 6;
      List<Integer> input_list = new LinkedList<>();
      for (int i = 1; i <= 9; i++) {
         input_list.add(i + 100);
      }
      System.out.println("정의된 리스트: " + input_list);
      System.out.println("인덱스 " + index_start + " 위치부터 " + index_end + " 위치 사이의 요소: "
            + input_list.subList(index_start, index_end));
   }
}

출력 결과

정의된 리스트: [101, 102, 103, 104, 105, 106, 107, 108, 109]
인덱스 3 위치부터 6 위치 사이의 요소: [104, 105, 106]

예제 2: 객체 지향 방식으로 함수 캡슐화하기

아래 예제에서는 하위 목록을 추출하는 로직을 별도의 함수로 분리하여 객체 지향 프로그래밍 스타일로 구현합니다.

import java.util.LinkedList;
import java.util.List;

public class Demo {
   static void printSublist(List<Integer> input_list, int index_start, int index_end) {
      System.out.println("인덱스 " + index_start + " 위치부터 " + index_end + " 위치 사이의 요소: "
            + input_list.subList(index_start, index_end));
   }

   public static void main(String[] args) {
      int index_start = 3;
      int index_end = 6;
      List<Integer> input_list = new LinkedList<>();
      for (int i = 1; i <= 9; i++) {
         input_list.add(i + 100);
      }
      System.out.println("정의된 리스트: " + input_list);
      printSublist(input_list, index_start, index_end);
   }
}

출력 결과

정의된 리스트: [101, 102, 103, 104, 105, 106, 107, 108, 109]
인덱스 3 위치부터 6 위치 사이의 요소: [104, 105, 106]

subList() 사용 시 주의사항

  • 뷰(View) 반환: subList()가 반환하는 목록은 원본 리스트의 뷰이므로, 하위 목록에서 변경한 내용은 원본 리스트에도 그대로 반영됩니다.
  • 범위 규칙: fromIndex는 포함되고 toIndex는 포함되지 않습니다. 즉, subList(3, 6)은 인덱스 3, 4, 5에 해당하는 요소들을 반환합니다.
  • 예외 처리: 유효하지 않은 인덱스(예: fromIndex > toIndex 또는 범위를 벗어난 값)를 전달하면 IndexOutOfBoundsException이 발생합니다.
  • 구조적 수정 주의: 하위 목록을 사용하는 도중 원본 리스트의 구조가 변경되면 ConcurrentModificationException이 발생할 수 있습니다.