Set 인터페이스

 

 Set Collection과 같이 객체들의 모임을 나타냅니다. Set역시 Collection이므로

Collection에서 할 수 있는 모든 행위를 할 수 있습니다.

Collection인터페이스와 Set인터페이스에서 선언한 메소드의 내용을 살펴보면 다를 바가

없습니다.

 Set에는 Collection에서 선언한 메소드외에 실제로 추가된 메소드가 없습니다.

다만 Set을 구현하는 구체적인 클래스에서 반드시 지켜야할 사항이 있는데,

바로 중복되는 객체(element)를 추가할 수 없는 것입니다. 수학에서 말하는

집합과 같은 의미로 생각하면 됩니다.

 

 

 

Set

boolean add(Object o)

컬렉션이 객체 o를 반드시 갖게 합니다.

호출 결과로 컬렉션이 변화가 있으면 true

그외 false

boolean addAll(Collection c)

컬렉션이 컬렉션 c에 포함된 모든 객체를 갖게 합니다.

호출 결과로 컬렉션이 변화가 있으면 true

그외 false

void clear()

컬렉션을 비웁니다.

boolean contains(Object o)

컬렉션이 객체 o를 갖고 있는지 확인합니다.

컬레션이 객체 o를 갖고 있으면 true

그외 false

boolean containsAll(Collection c)

컬렉션이 컬렉션 c가 포함한 객체들을 포함하는지 확인

합니다.

컬렉션이 컬렉션 c가 포함한 객체들을 포함하면 true

그외 false

boolean equals(Object o)

컬렉션이 객체 o와 같은지 비교합니다.

컬렉션이 객체 o와 같으면 true

그외 false

int hashCode()

켈렉션의 해쉬코드값을 구합니다.

컬레션의 해쉬코드 값

boolean isEmpty()

켈렉션이 객체를 포함하고 있지 않은지 확인합니다.

컬렉션이 포함하는 객체가 하나도 없으면 true

그외 false

Iterator iterator()

컬렉션의 Iterator를 구합니다.

컬렉션의 Iterator

boolean remove(Object o)

컬렉션에서 객체 o를 제거합니다.

호출 결과로 컬렉션이 변화가 있으면 true

그외 false

boolean removeAll(Collection c)

컬렉션에서 컬렉션 c에 포함된 모든 객체를 제거합니다.

호출 결과로 컬렉션이 변화가 있으면 true

그외 false

boolean retainAll(Collection c)

컬렉션에서 컬렉션 c에 포함된 객체를 제외한 나머지

객체를 제거합니다.

호출 결과로 컬렉션이 변화가 있으면 true

그외 false

int size()

컬렉션이 갖고 있는 객체의 개수를 구합니다.

컬렉션이 갖고 있는 객체의 수.

Object[] toArray()

컬렉션에서 갖고 있는 객체를 배열로 구합니다.

컬레션에서 갖고 있는 객체의 배열.

Object[] toArray(Object[] a)

컬렉션에서 갖고 있는 객체를 배열로 구합니다.

컬렉션에서 갖고 있는 객체의 배열

리턴되는 배열은 지정한 배열의 클래스 타입으로 변환

  5 - 2

 

 

import java.util.*;

/**

* Set의 기본 사용법을 보여줍니다.

*/

public class SetDemo {

             public void operation(Set s1, Set s2) {

                           // s1 Integer객체를 10개 저장합니다.

                           for(int i = 0; i < 10; i++)

                                        s1.add(new Integer(i));      

                                                    

                           // s2 Integer객체를 10개 저장합니다.

                           for(int i = 5; i < 15; i++)

                                        s2.add(new Integer(i));                   

 

                           // s1 Set s2 Set에 포함된 객체를 더합니다.                                                                                                                                    // 더합니다.

                           s1.addAll(s2);                                                           

 

                           // s1 Set Integer객체를 포함하는지 확인합니다.

                           if (s1.contains(new Integer(11))) {

                                        System.out.println("s1 has " + new Integer(11));

                           }

                           else {

                                        System.out.println("s1 doesn't have " + new Integer(11));

                           }

                          

                           // s1 s2에 포함된 객체를 모두 갖고 있는지 확인  

                           if (s1.containsAll(s2)) {      

                                        System.out.println("s1 has s2");

                           }

                           else {

                                        System.out.println("s1 doesn't have s2");

                           }

 

                           // s2 s1에 포함된 객체를 모두 갖고 있는지 확인  

                           if (s2.containsAll(s1)) {      

                                        System.out.println("s2 has s1");

                           }

                           else {

                                        System.out.println("s2 doesn't have s1");

                           }

                           System.out.println("s1 size " + s1.size());

                           System.out.println("s2 size " + s2.size());

                           s2.clear();                                      // s2를 비움

                           System.out.println("s2 clear");

                           System.out.println("s1 size " + s1.size());

                           System.out.println("s2 size " + s2.size());

 

                           // s1 Set이 갖고 있는 객체를 모두 한번씩 참조

                           for(Iterator it = s1.iterator(); it.hasNext();) {

                                        System.out.print(it.next() + " ");

                           }

                           System.out.println();

                          

                           // s1 Set의 내용을 array로 변경하여 리턴

                           Integer[] array = (Integer[])s1.toArray(new Integer[0]);

                           for(int i = 0; i < array.length; i++) {

                                        System.out.print(array[i] + " ");

                           }

                           System.out.println();

             }

             public static void main(String[] args) {

                           SetDemo demo = new SetDemo();

                           demo.operation(new HashSet(),new TreeSet());

             }

}           

예제 5 - 3  SetDemo.java

 


사용자 삽입 이미지

 그림 5 - 3 [run SetDemo]

 

SetDemo CollectionDemo와 본질적으로 같지만 SetDemo operation(Set s1, Set s2)

같이  메소드의 인자의 범위를 Collection에서 Set으로 축소했습니다.

, 중복되는 객체를 가질수도 있는 Collection은 처리를 하지 않겠다는 뜻인 거지요.

operation메소드의 인자인 HashSet 객체나 TreeSet 객체는 대표적인 Set입니다.

 

결과로 나온 내용을 보면 s1의 크기가 15로 나와있는데 이것은 s1에 포함되어 있는

 Integer(5)부터 Integer(9) 까지가 중복 처리되어서 s1에 추가되지 않았기 때문입니다.

이와 같이 Set은 같은 객체가 두개 이상 존재하지 않아야 하는 경우는 예제 5 - 3과 같이

인자의 범위를 Collection에서 Set으로 줄여서 사용하면 좋겠습니다.

Posted by
,