JAVA

[JAVA] List 활용

인생아 2024. 11. 18. 18:59
반응형

1. 중복 제거: Set과 List 조합

왜 중복 제거가 필요한가?

리스트는 중복 데이터를 허용하기 때문에, 특정 데이터의 유일성을 보장해야 하는 경우 중복 제거가 필수적입니다. Set은 데이터의 중복을 자동으로 제거하는 자료구조로, 이를 활용해 리스트의 중복 데이터를 제거할 수 있습니다.

Set과 List를 조합한 중복 제거

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

public class Main {
    public static void main(String[] args) {
        List<String> names = new ArrayList<>();
        names.add("김철수");
        names.add("이영희");
        names.add("김철수"); // 중복 데이터

        // Set으로 중복 제거
        Set<String> uniqueNames = new HashSet<>(names);
        List<String> result = new ArrayList<>(uniqueNames);

        System.out.println("중복 제거된 리스트: " + result);
    }
}

출력 결과

중복 제거된 리스트: [김철수, 이영희]

Stream을 활용한 중복 제거

Java 8의 Stream API를 활용하면 더 간단히 중복을 제거할 수 있습니다.

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

public class Main {
    public static void main(String[] args) {
        List<String> cities = new ArrayList<>();
        cities.add("서울");
        cities.add("부산");
        cities.add("서울");

        // Stream으로 중복 제거
        List<String> uniqueCities = cities.stream().distinct().collect(Collectors.toList());
        System.out.println("중복 제거된 도시 목록: " + uniqueCities);
    }
}
반응형

2. 다차원 리스트와 데이터 구조

다차원 리스트란?

다차원 리스트는 List<List<T>> 형태로, 표 형태의 데이터를 다룰 때 유용합니다. 예를 들어, 학생들의 성적을 과목별로 저장하거나 행렬 계산에 활용할 수 있습니다.

다차원 리스트의 기본 사용법

import java.util.ArrayList;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        List<List<String>> students = new ArrayList<>();

        // 각 학생 데이터 추가
        List<String> student1 = new ArrayList<>();
        student1.add("김철수");
        student1.add("수학");
        student1.add("90");

        List<String> student2 = new ArrayList<>();
        student2.add("이영희");
        student2.add("과학");
        student2.add("85");

        students.add(student1);
        students.add(student2);

        // 출력
        for (List<String> student : students) {
            System.out.println("학생 정보: " + student);
        }
    }
}

출력 결과

학생 정보: [김철수, 수학, 90]
학생 정보: [이영희, 과학, 85]

다차원 리스트와 행렬 연산

다차원 리스트는 행렬 계산에도 유용합니다. 아래는 간단한 2x2 행렬의 덧셈 연산 예제입니다.

import java.util.ArrayList;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        List<List<Integer>> matrix1 = List.of(
            List.of(1, 2),
            List.of(3, 4)
        );

        List<List<Integer>> matrix2 = List.of(
            List.of(5, 6),
            List.of(7, 8)
        );

        List<List<Integer>> result = new ArrayList<>();

        for (int i = 0; i < matrix1.size(); i++) {
            List<Integer> row = new ArrayList<>();
            for (int j = 0; j < matrix1.get(i).size(); j++) {
                row.add(matrix1.get(i).get(j) + matrix2.get(i).get(j));
            }
            result.add(row);
        }

        System.out.println("행렬 덧셈 결과: " + result);
    }
}

출력 결과

행렬 덧셈 결과: [[6, 8], [10, 12]]

3. List로 큐나 스택 기능 구현

큐(Queue) 구현

큐는 FIFO(First-In-First-Out) 방식으로 동작하는 자료구조입니다. Java의 ArrayList를 활용해 간단히 큐를 구현할 수 있습니다.

import java.util.ArrayList;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        List<String> queue = new ArrayList<>();

        // 데이터 추가
        queue.add("김철수");
        queue.add("이영희");

        // 데이터 제거
        String first = queue.remove(0); // 첫 번째 요소 제거
        System.out.println("처음 제거된 요소: " + first);
        System.out.println("현재 큐 상태: " + queue);
    }
}

출력 결과

처음 제거된 요소: 김철수
현재 큐 상태: [이영희]

스택(Stack) 구현

스택은 LIFO(Last-In-First-Out) 방식으로 동작합니다. Java의 ArrayList로 스택을 구현하는 방법은 다음과 같습니다.

import java.util.ArrayList;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        List<String> stack = new ArrayList<>();

        // 데이터 추가
        stack.add("서울");
        stack.add("부산");

        // 데이터 제거
        String last = stack.remove(stack.size() - 1); // 마지막 요소 제거
        System.out.println("가장 최근 제거된 요소: " + last);
        System.out.println("현재 스택 상태: " + stack);
    }
}

출력 결과

가장 최근 제거된 요소: 부산
현재 스택 상태: [서울]

참고 사이트

Java 공식 문서: https://docs.oracle.com/javase/8/docs/api/java/util/List.html

반응형