JAVA

221026 Set

주영재 2022. 10. 26. 14:39

Set
=>데이터를 중복없이 저장하는 자료구조 인터페이스
똑같은걸 저장하는 것이 불가능
=>해싱을 이용하기 때문에 데이터의 저장 순서도 기본적으로는 알 수 없습니다.
=>저장 순서를 알 수 없기 때문에 하나의 요소를 가져오는 메서드를 제공하지 않음
배열은 [index] , List는 get(index)
아니면 이름을 사용해야 하는데, Set은 이름도 없음

1)구현된 메서드
=>iterator()가 구현되어 있어서 데이터를 하나씩 가져오지는 못하지만 순서대로 하나씩 접근하는 것은 가능
=>추가, 삭제 등을 위한 메서드도 제공
add, addAll, remove, removeAll

2)구현된 클래스
=>HashSet 기본이 되는 Set을 구현한 클래스, 보통의 경우 Set이라고 하면 HashSet을 의미함.
=>LinkedHashSet 데이터가 저장된 순서를 기억하는 Set.
=>TreeSet 오름차순 정렬한 순서를 기억하는 Set, 크기 비교하는 방법을 제공하는 클래스의 데이터만 저장 가능
크기를 기억하는 것. 크기 순서대로 저장하는 것이 아님
순서대로 저장하려면 자리바꿈이 너무 많이 일어나고, 그럼 시간이 오래 걸림
등수를 찾아가지고 순서대로 주는 것. 

따로 정렬하는 메서드를 적을 필요 없다! 알아서 해줌

3)Set클래스들을 비교

package java_1026_Set_Ex;

import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.Set;
import java.util.TreeSet;

public class SetClassCompare {
	public static void main(String[] args) {
		//문자열을 저장하는 Set 인스턴스를 3개 생성
		Set<String> hashSet = new HashSet<>();
		Set<String> linkedHashSet = new LinkedHashSet<>();
		Set<String> treeSet = new TreeSet<>();
		
		//샘플 데이터 삽입
		hashSet.add("Adam");
		linkedHashSet.add("Adam");
		treeSet.add("Adam");
		
		
		hashSet.add("eve");
		linkedHashSet.add("eve");
		treeSet.add("eve");
		
		
		hashSet.add("CAIN");
		linkedHashSet.add("CAIN");
		treeSet.add("CAIN");
		
		hashSet.add("Abel");
		linkedHashSet.add("Abel");
		treeSet.add("Abel");
		//중복데이터저장
		hashSet.add("Abel");
		linkedHashSet.add("Abel");
		treeSet.add("Abel");
		
		//데이터 출력
		//HashSet 출력-어떤 순서로 출력될 지 예측할 수 없음
		for(String a : hashSet) {
			System.out.println(a);
		}
		System.out.println("================");
		//LinkedHashSet 출력-저장한 순서대로 출력
		for(String a : linkedHashSet) {
			System.out.println(a);
		}
		System.out.println("================");
		//TreeSet 출력-정렬한 순서대로 출력되는데 숫자가 영문자보다 작고 대문자가 소문자보다 작음-아스키코드값에 따라 출력
		for(String a : treeSet) {
			System.out.println(a);
		}
		
		
		
	}

}
Adam
eve
Abel
CAIN
================
Adam
eve
CAIN
Abel
================
Abel
Adam
CAIN
eve

출력이 각각 어떻게 되는지 확인할 것. 중요한건 어느 상황에 어떤걸 사용할지 스스로 고를 수 있어야 한다는 것이다.