[TIL][Java][2023-12-06] 컬렉션 - Set

2023. 12. 6. 19:19TIL/Java

Set

 

set은 순서가 없는 데이터의 집합이다. 데이터 중복을 허용하지 않는다. - 순서가 없고 중복도 없는 배열

 

 

  • 특징
    • 순서가 보장되지 않는 대신 중복을 허용하지 않는다.
    • Set은 HashSet, TreeSet 등으로 응용하여 사용할 수 있다.
    • Set은 생성자가 없는 껍데기라서 바로 생성할 수는 없다.(인터페이스)
    • 생성자가 존재하는 클래스인 HashSet을 사용하여 Set을 생성해 받을 수 있다.

 

  • 기능
    • 선언 : Set<Integer> intSet 의 형태로 선언한다.
    • 생성 : new HashSet<Integer>(); 의 형태로 생성한다.
    • 추가 : intSet.add(추가할 값) 의 형태로 값을 맨 위에 추가한다.
    • 조회 : intSet.get(조회할 순번) 의 형태로 순번에 있는 값을 조회한다.
    • 삭제 : intSet.remove(삭제할 값) 의 형태로 삭제할 값을 직접 지정한다.
    • 포함확인 : intSet.contains(포함확인 할 값) 의 형태로 해당값이 포함되어 있는지 boolean 값으로 응답받는다.

 

  • 응용된 Set?
    • HashSet : 가장 빠르며 순서를 전혀 예측할 수 없다.
    • TreeSet : 정렬된 순서대로 보관하며 정렬 방법을 지정할 수 있다.
    • LinkedHashSet : 추가된 순서, 또는 가장 최근에 접근한 순서대로 접근 가능하다.
      보통 HashSet을 사용하는데, 순서보장이 필요하면 LinkedHashSet을 주로 사용한다.

 

 

// Set 
// (사용하기 위해선 import java.util.Set; 와 java.util.HashSet; 를 추가해야한다.)

import java.util.HashSet;
import java.util.Set;

public class Main {

	public static void main(String[] args) {
		Set<Integer> intSet = new HashSet<Integer>(); // 선언 및 생성

		// 추가
		intSet.add(1);
		intSet.add(2);
		intSet.add(3);
		intSet.add(3); // 중복된 값은 덮어쓴다.
		intSet.add(3); // 중복된 값은 덮어쓴다.

		for (Integer value : intSet) {
			System.out.println(value); // 1,2,3 출력
		}

		// contains()
		System.out.println(intSet.contains(2)); // true 출력
		System.out.println(intSet.contains(4)); // false 출력

		// remove()
		intSet.remove(3); // 3 삭제

		for (Integer value : intSet) {
			System.out.println(value); // 1,2 출력
		}
	}
}