Set은 우리말로 '집합'입니다.
A = {a, b, c} , B = {a, b}... 이런게 집합이죠?
중학생때 배웠던 기억을 꺼내보면... 잘 기억이 나지 않을 수도 있지만...
집합은 똑같은 값 즉, 중복된 값을 가지지는 않습니다.
또한 순서는 상관이 없죠.
A = {a, b, c} 이 집합 A를 A={c, a, b} 라고 써도 같다는 거죠.
1. 중복된 값은 저장하지 않는다.
2. 저장 순서는 상관이 없다.
이 두가지 특징이 Set의 특징이 됩니다.
잠깐 중복된 값이 저장되지 않는다라는 특징이 맞는지 확인해 보겠습니다.
1, 2, 3, 1, 1을 추가하였는데 출력은 1, 2, 3 만 출력 됨을 확인 할 수 있습니다.
이제는 Set인터페이스를 구현한 대표적인 HashSet을 알아보겠습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | import java.util.HashSet; public class SetDemo { public static void main(String[] args){ HashSet<Integer> hs = new HashSet<Integer>(); hs.add(1); hs.add(2); hs.add(3); hs.add(4); hs.add(5); HashSet<Integer> hs2 = new HashSet<Integer>(); hs2.add(3); hs2.add(4); hs2.add(5); } } | cs |
hs1이라는 HashSet과 hs2라는 HashSet을 만들었습니다.
이것을 그림으로 표현해 보면 다음과 같이 표현할 수 있습니다.
두개의 집합이 생긴거죠~
이 두개의 집합을 가지고 합집합, 교집합, 차집합, 부분집합을 구해보도록 하겠습니다.
먼저 부분집합을 알아보려고 하는데요
집합hs2는 hs의 부분집합입니다.
이것이 맞는지 틀린지 알아보기 위해서는 containsAll()을 사용하면 알 수 있습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | import java.util.HashSet; public class SetDemo { public static void main(String[] args){ HashSet<Integer> hs = new HashSet<Integer>(); hs.add(1); hs.add(2); hs.add(3); hs.add(4); hs.add(5); HashSet<Integer> hs2 = new HashSet<Integer>(); hs2.add(3); hs2.add(4); hs2.add(5); System.out.println(hs.containsAll(hs2)); } } | cs |
17번라인처럼 containsAll()을 사용해서 출력을 해보면 true, false로 리턴 해줍니다.
지금의 경우는 hs2가 hs의 부분집합을 만족하므로 true를 출력합니다.
이번엔 합집합을 구해보겠습니다.
합집합을 구하기 위해서는 addAll()이라는 메소드를 사용하면 됩니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | import java.util.HashSet; public class SetDemo { public static void main(String[] args){ HashSet<Integer> hs = new HashSet<Integer>(); hs.add(1); hs.add(2); hs.add(3); hs.add(4); hs.add(5); HashSet<Integer> hs2 = new HashSet<Integer>(); hs2.add(3); hs2.add(4); hs2.add(5); hs2.add(6); hs2.add(7); hs.addAll(hs2); System.out.println(hs.toString()); } } | cs |
hs2에 6과 7을 추가했습니다.
그리고 addAll()을 이용해서 집합hs에 합하였습니다.
이런 모습이 된겁니다.
이번엔 차집합을 구해보도록 하겠습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | import java.util.HashSet; public class SetDemo { public static void main(String[] args){ HashSet<Integer> hs = new HashSet<Integer>(); hs.add(1); hs.add(2); hs.add(3); hs.add(4); hs.add(5); HashSet<Integer> hs2 = new HashSet<Integer>(); hs2.add(3); hs2.add(4); hs2.add(5); hs2.add(6); hs2.add(7); hs.removeAll(hs2); System.out.println(hs.toString()); } } | cs |
20번 라인처럼 removeAll()이라는 메소드를 사용해서 집합hs와 집합hs2에서 집합hs의 값들 중 에서 집합hs2에도 있는 값을 뺸 값들이 나옵니다.
마지막으로 교집합입니다.
두 집합 중 공통된 값을 뽑아내는 것이죠.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | import java.util.HashSet; public class SetDemo { public static void main(String[] args){ HashSet<Integer> hs = new HashSet<Integer>(); hs.add(1); hs.add(2); hs.add(3); hs.add(4); hs.add(5); HashSet<Integer> hs2 = new HashSet<Integer>(); hs2.add(3); hs2.add(4); hs2.add(5); hs2.add(6); hs2.add(7); hs.retainAll(hs2); System.out.println(hs.toString()); } } | cs |
20번라인처럼 retainAll()이라는 메소드를 사용하였습니다.
지금까지 사용된 contatinsAll(), addAll(), removeAll(), retainAll() 메소드는 List에서도 사용이 가능합니다.
왜냐하면~ 맨 위의 Collection 클래스 다이어 그램을 보면 Collection인터페이스에 정의되어 있기 때문입니다~!!
'프로그래밍 > Java' 카테고리의 다른 글
[java] 39. Collections(컬렉션) - Map (0) | 2015.07.26 |
---|---|
[java] 38. List와 Set이 차이점을 간단히 알아보자. (0) | 2015.07.26 |
[java] 36. Collections(컬렉션) - Iterator (0) | 2015.07.24 |
[java] 35. Collections(컬렉션) - Collections Framework 와 List (1) | 2015.07.21 |
[java] 34. 제네릭(Generics) (1) | 2015.07.15 |