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

Java로 배열·리스트에서 고유한 값만 출력하는 프로그램

Java에서 배열이나 리스트에 담긴 값들 중 중복을 제거하고 고유한(distinct) 값만 출력하는 방법은 여러 가지가 있습니다. 그중 가장 기본적인 방법인 중첩 반복문을 활용한 구현 예제는 다음과 같습니다.

예제 코드

import java.io.*;
public class Demo{
    static void distinct_vals(int my_arr[], int len){
        for (int i = 0; i < len; i++){
            int j;
            for (j = 0; j < i; j++)
                if (my_arr[i] == my_arr[j])
                    break;
            if (i == j)
                System.out.print(my_arr[i] + " ");
        }
    }
    public static void main (String[] args){
        int my_arr[] = {55, 67, 99, 11, 54, 55, 88, 99, 1, 13, 45};
        int arr_len = my_arr.length;
        System.out.println("배열의 고유한 요소들은 다음과 같습니다.");
        distinct_vals(my_arr, arr_len);
    }
}

실행 결과

배열의 고유한 요소들은 다음과 같습니다.
55 67 99 11 54 88 1 13 45

코드 설명

Demo라는 클래스 안에는 distinct_vals라는 메서드가 정의되어 있으며, 이 메서드는 배열배열의 길이를 매개변수로 전달받습니다.

메서드 내부에서는 바깥쪽 반복문으로 배열의 모든 요소를 하나씩 순회하고, 안쪽 반복문으로 현재 요소보다 앞에 있는 요소들과 값을 비교합니다. 만약 동일한 값이 이미 등장했다면 break 문으로 내부 반복문을 빠져나오고, 끝까지 비교했을 때 중복이 없는 경우(i == j)에만 해당 값을 출력합니다. 이렇게 하면 처음 등장한 값만 남기고 이후의 중복 값은 자연스럽게 걸러지게 됩니다.

main 메서드에서는 정수형 배열을 선언하고, length 속성으로 배열의 길이를 변수에 저장한 뒤, distinct_vals 메서드를 호출하여 결과를 콘솔에 출력합니다.

더 간결한 방법: Stream API 활용

Java 8 이상을 사용한다면 Stream API의 distinct() 메서드를 이용해 훨씬 간결하게 중복을 제거할 수 있습니다.

import java.util.Arrays;
import java.util.List;

public class Demo {
    public static void main(String[] args) {
        List<Integer> myList = Arrays.asList(55, 67, 99, 11, 54, 55, 88, 99, 1, 13, 45);
        myList.stream()
              .distinct()
              .forEach(v -> System.out.print(v + " "));
    }
}

두 방식 모두 동일하게 55 67 99 11 54 88 1 13 45를 출력합니다. 소규모 학습용 코드에는 중첩 반복문 방식이 적합하고, 실무에서는 가독성과 유지보수성이 뛰어난 Stream API 방식을 권장합니다.