티스토리 뷰
Set
: 중복된 값을 저장하지 않는 집합(Set) 자료구조의 기능을 정의하는 인터페이스.
- Set은 순서에 상관없이 요소를 저장하며, 중복된 값을 허용하지 않음.
- 대표적인 클래스로는 HashSet, TreeSet, LinkedHashSet이 있음.
HashSet
: 해시 테이블(hash table)을 구현한 클래스, 가장 빠른 검색 속도를 제공.
- 순서를 보장하지 않지만, 중복된 값을 허용하지 않음
TreeSet
: 이진 검색 트리(binary search tree)를 구현한 클래스로, 요소를 자동으로 정렬함.
- TreeSet은 검색 속도가 빠르지만, HashSet보다는 느리다.
LinkedHashSet
: LinkedHashSet은 해시 테이블과 연결 리스트(linked list)를 결합한 클래스.
- 요소를 삽입한 순서대로 저장.
- LinkedHashSet은 HashSet과 비슷한 검색 속도를 제공하면서 순서를 보장한다
- 주로 이터레이터(Iterator) 활용
주요 메서드
| 메서드 이름 | 설명 | 
| boolean add(E e) | -  Set에 요소를 추가합니다. - 추가에 성공하면 true를 반환하고, 이미 Set에 존재하는 요소를 추가하려는 경우 false를 반환합니다. | 
| boolean remove(Object o) | - Set에서 지정된 요소를 제거합니다. - 제거에 성공하면 true를 반환하고, Set에 해당 요소가 존재하지 않는 경우 false를 반환합니다. | 
| boolean contains(Object o) | - Set에 지정된 요소가 포함되어 있는지 확인합니다. - 포함되어 있다면 true를 반환하고, 포함되어 있지 않다면 false를 반환합니다. | 
| int size() | - Set에 저장된 요소의 개수를 반환합니다. | 
| void clear() | - Set에서 모든 요소를 제거합니다. | 
| boolean hasNext() | 다음 요소가 있으면 true를 반환하고, 없으면 false를 반환 합니다. | 
| object next() | 다음 요소를 반환합니다. | 
| void remove() | 다음 요소를 삭제합니다. | 

예시코드 그림으로 보기
HashSet<A> set = new HashSet<A>();
A a1 = new A(7,8);
set.add(new A(5,6));
set.add(a1);
Iterator<A> it = set.iterator();
int num = 1;
while(it.hasNext()) {
A a = it.next();
if (a == a1) {
System.out.println(num+"번째에 있습니다.");
}
num++;
}

예제 1>
package mega.backend_onemore.Day28;
import java.util.Collections;
import java.util.HashSet;
import java.util.Iterator;
// hasNext로 뒤에 값 있는지 확인하고 next로 넘어가서 다음 요소 반환시킴.
public class SetTest1 {
  public static void main(String[] args) {
    HashSet<String> a = new HashSet<>();
    HashSet<Integer> b = new HashSet<>();
    String[] color = {"빨간색","주황색","노란색","초록색","파란색","남색","보라색"};
    for(int i = 0;i<color.length;i++) {
      a.add(color[i]);
      b.add(i);
    }
    a.add("빨간색"); // 추가적으로 안 들어감, 여기서는 무시됨.
    boolean checkChange = a.add("무지개색"); // 잘 들어갔으면 true가 나온다.
    System.out.println(checkChange);
    System.out.println("b의 가장 큰값은 ? > " + Collections.max(b)); // 6 출력
    System.out.println("b의 가장 최소값은 ? > " + Collections.min(b)); // 0 출력
    // 얘는 순서가 없기 때문에 이터레이터를 통해 돌려서 출력해야 한다.
    Iterator<String> it = a.iterator();
    while(it.hasNext()) {
      System.out.println(it.next());
    }
  }
}실행 결과
true
b의 가장 큰값은 ? > 6
b의 가장 최소값은 ? > 0
노란색
주황색
남색
파란색
무지개색
초록색
빨간색
보라색
예제 2>
package mega.backend_onemore.Day28;
import java.util.HashSet;
import java.util.Iterator;
class A {
  int a;
  int b;
  A(int a, int b){
    this.a = a;
    this.b = b;
  }
  void print() {
    System.out.println("a:"+a+",b :"+b);
  }
}
public class SetTest2 {
  public static void main(String[] args) {
    HashSet<A> set = new HashSet<A>();
    A a1 = new A(7,8);
    set.add(new A(5,6));
    /*
    set.add(new A(5,6));
    set.add(new A(5,6)); 이 두개 쓰는 것은 가능
    new를 두 번 불렀기 때문에 객체가 다르므로.
    하지만 찾을 때 곤란해지는 상황이 생기지.
     */
    set.add(a1);
    Iterator<A> it = set.iterator();
    int num = 1;
    while(it.hasNext()) {
      A a =it.next();
      if(a == a1) { // 변수로 a1을 빼놨기 때문에 비교 가능
        System.out.println(num+"번째에 있습니다.");
        // 돌 거니까 1번째, 2번째 등 여러 숫자 중 하나가 나올 수 있음
      }
      num++;
    }
  }
}
출력 결과
1번째에 있습니다.
728x90
    
    
  반응형
    
    
    
  '[개발] - Java > Mega' 카테고리의 다른 글
| Day28-4. 자료구조 (7) Queue (0) | 2023.04.24 | 
|---|---|
| Day28-3. 자료구조(6) Map (0) | 2023.04.24 | 
| Day28-29. 파일 입출력 (0) | 2023.04.24 | 
| Day27-4. 자료구조와 컬렉션 (2) Stack (0) | 2023.04.23 | 
| Day27-3. 자료구조와 컬렉션 (1) List (0) | 2023.04.23 | 
 
                            Comments
                            
                        
                        
                        
                    
                    
                    
                        
                    
                 
                                                    