본문 바로가기

Language/Java

합집합, 교집합, 차집합 ArrayList로 구현해보기

반응형

알고리즘 문제를 풀다보면 집합 관련된 문제들을 꽤 자주 만나게 된다.

자주 사용하는 집합들을 따로 정리해놓으려고 한다.

package set;

import java.util.*;

public class SetExample
{
    public static void main(String [] args)
    {
        ArrayList<String> arr1 = new ArrayList<>();
        ArrayList<String> arr2 = new ArrayList<>(5);
        for (int i = 0; i<10; i++)
        {
            arr1.add(String.valueOf(i));
            if (i >= 5)
            {
                arr2.add(String.valueOf(i+2));
            }
        }

        System.out.println("arr1 : " + arr1);
        System.out.println("arr2 : " + arr2);

        System.out.println("-------합집합-------");
        System.out.println(union(arr1, arr2));
        System.out.println("-------합집합-------");

        System.out.println();

        System.out.println("-------교집합-------");
        System.out.println(intersection(arr1, arr2));
        System.out.println("-------교집합-------");

        System.out.println();

        System.out.println("-------차집합-------");
        System.out.println(difference(arr1, arr2));
        System.out.println("-------차집합-------");
    }

    private static <T> ArrayList<T> union(ArrayList<T> list1, ArrayList<T> list2) // 합집합
    {
        Set<T> set = new HashSet<T>(15);
        set.addAll(list1);
        set.addAll(list2);

        return new ArrayList<T>(set);
    }

    private static <T> ArrayList<T> intersection(ArrayList<T> list1, ArrayList<T> list2) // 교집합
    {
        ArrayList<T> result = new ArrayList<>(15);
        result.addAll(list1);
        result.retainAll(list2);
        return result;
    }

    private static <T> ArrayList<T> difference(ArrayList<T> list1, ArrayList<T> list2) // 차집합
    {
        ArrayList<T> result = new ArrayList<>(15);
        result.addAll(list1);
        result.removeAll(list2);
        return result;
    }
}

 

반응형

'Language > Java' 카테고리의 다른 글

시간 간격을 정확하게 측정하는 방법.  (0) 2024.01.18
Java로 자료구조(LinkedList, Stack, Queue) 구현해보기  (0) 2021.04.26
자바 == 연산자  (0) 2021.04.12
제네릭(Generic)  (0) 2021.04.02
Interface Comparable  (0) 2020.11.29