반응형

 

 

 

 

 

 

📌 자바 ArrayList를 통해 집합 연산하기

자바의 ArrayList는 List 인터페이스를 상속받은 클래스이다.

 

일반적인 배열과 같이 인덱스로 내부의 객체를 관리한다는 점이 유사하지만 한번 생성되면 크기가 변하지 않는 배열과는 달리 ArrayList는 객체들이 추가되어 저장 용량(capacity)을 초과하면 자동으로 부족한 크기만큼 저장 용량이 늘어나는 특징을 가지고 있다.

 

 

 

 

 

1️⃣ 교집합

List클래스의 retainAll( )메서드를 사용하여 교집합을 구할 수 있다. 

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

public class 교집합 {
    public static void main(String[] args) {
        List<String> arrayList = new ArrayList<String>();
        arrayList.add("A");
        arrayList.add("B");
        arrayList.add("C");

        List<String> arrayList2 = new ArrayList<String>();
        arrayList2.add("A");
        arrayList2.add("B");
        arrayList2.add("C");
        arrayList2.add("D");
        arrayList2.add("E");
        arrayList2.add("F");

        arrayList.retainAll(arrayList2);
        System.out.println("교집합 : "+ arrayList ); // 교집합 : [A, B, C]
    }

}

 

 

 

 

2️⃣ 부분집합 판단

List클래스의 containsAll( ) 메서드를 사용하여 부분집합을 구할 수 있다.

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

public class 부분집합 {
    public static void main(String[] args) {
        List<String> arrayList = new ArrayList<String>();
        arrayList.add("A");
        arrayList.add("B");
        arrayList.add("C");

        List<String> arrayList2 = new ArrayList<String>();
        arrayList2.add("A");
        arrayList2.add("B");
        arrayList2.add("C");
        arrayList2.add("D");
        arrayList2.add("E");
        arrayList2.add("F");

        List<String> arrayList3 = new ArrayList<String>(Arrays.asList("A", "B", "C"));

        boolean isVal = arrayList.containsAll(arrayList2);
        boolean isVal2 = arrayList2.containsAll(arrayList3);

        System.out.println("isVal: "+ isVal);   // isVal: false
        System.out.println("isVal2: "+ isVal2); // isVal2: true
    }

}

isVal은 arrayList2가 arrayList의 부분집합에 속하는지에 대한 결과로 false 값을 반환한다.

isVal2는 arrayList3는 arrayList2의 부분집합에 속하는지에 대한 결과로 true 값을 반환하였다.

 

 

 

 

3️⃣ 차집합

List클래스의 removeAll( ) 메서드를 사용하여 차집합을 구할 수 있다.

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

public class 차집합 {
    public static void main(String[] args) {
        List<String> arrayList = new ArrayList<String>();
        arrayList.add("A");
        arrayList.add("B");
        arrayList.add("X");
        arrayList.add("Y");

        List<String> arrayList2 = new ArrayList<String>();
        arrayList2.add("A");
        arrayList2.add("B");
        arrayList2.add("C");
        arrayList2.add("D");
        arrayList2.add("E");
        arrayList2.add("F");

        arrayList.removeAll(arrayList2);
        System.out.println("차집합 : "+ arrayList ); // 차집합 : [X, Y]
    }

}

 

 

 

 

4️⃣ 합집합

List클래스의 addAll( ) 메서드를 사용하여 합집합을 구할 수 있다.

addAll( ) 메서드는 중복 값을 제거해 주지 않기 때문에 HashSet을 통하여 중복 값을 제거한 것에 유의하자.

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

public class 합집합 {
    public static void main(String[] args) {
        List<String> arrayList = new ArrayList<String>();
        arrayList.add("X");
        arrayList.add("Y");
        arrayList.add("Z");

        List<String> arrayList2 = new ArrayList<String>();
        arrayList2.add("A");
        arrayList2.add("B");
        arrayList2.add("C");

        // 중복이 포함될 수 있는 합집합 리스트
        arrayList.addAll(arrayList2);

        //HashSet을 통합 중복제거
        HashSet<String> hash1 = new HashSet<String>();
        hash1.addAll(arrayList);

        // 출력
        Iterator iterator = hash1.iterator();
        while(iterator.hasNext()) {
            System.out.print(iterator.next() + " "); // A B C X Y Z 
        }

    }

}

 

 

 

 

 

 

 

 

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