[Java]Collection - Set

수경·2023년 8월 15일
0
post-thumbnail

Set 계열 (Set 인터페이스)

  • HashSet(***)
  • TreeSet

HashSet

  • 중복을 허용하지 않는다!

메소드

add(T value) : 요소 추가
size() : 요소의 개수
remove(T value) : 요소 삭제 / 인덱스가 없기에 값으로밖에 접근 못한다.
contains(T value) : 요소 찾기 boolean형을 반환한다.

예제코드

		HashSet<String> set = new HashSet<String>();
        
        set.add("강아지");
		set.add("고양이");
		set.add("거북이");
        
        System.out.println(set.size());
        System.out.println(set.add("고양이"));	//중복 값이므로 false
        
        System.out.println(set.remove(1));	//false
        set.remove("거북이");	
        System.out.println(set);
        
        System.out.println(set.contains("강아지"));
        

3
false
[고양이, 거북이, 강아지][고양이, 강아지]
true

TreeSet

특징

  • 객체를 중복해서 저장할 수 없고 저장 순서가 유지되지 않는다는 Set의 성질을 그대로 가지고 있다.
  • TreeSet은 이진 탐색 트리(BinarySearchTree) 구조로 이루어져 있다. 이진 탐색 트리는 추가와 삭제에는 시간이 조금 더 걸리지만 정렬, 검색에 높은 성능을 보이는 자료구조이다.
  • Tree 구조 + Set 사용법
  • Tree 구조 : 이진 트리 구조(이진 탐색 트리, Binary Search Tree)

TreeSet 고유메소드

  • first() : 정렬된 순서에 첫번째 요소 반환
  • last() : 정렬된 순서에 마지막 요소 반환
  • subSet(E fromElement, E toElement) : from 요소 부터 to 까지의 객체들을 반환 / to 요소 제외(exclusive)
  • headSet(E toElement) 파라미터보다 작은 값 반환 / to 요소 제외(exclusive)
  • tailSet(E fromElement) 파라미터보다 큰 값 반환 / from 요소 포함(inclusive)

예제코드

		TreeSet<Integer> set = new TreeSet<Integer>();
		
		set.add(10);
		set.add(30);
		set.add(40);
		set.add(20);
		set.add(50);
		
		System.out.println("TreeSet 요소목록:" + set);	//TreeSet은 자동 정렬된다.
		
		//탐색 : for / iterator
		System.out.println("for문으로 탐색");
		for (int n : set) {
			System.out.println(n);
		}
		System.out.println();
		
		System.out.println("iterator로 탐색");
		Iterator<Integer> iter = set.iterator();
		while(iter.hasNext()) {
			System.out.println(iter.next());
		}
		System.out.println();
		
		//TreeSet 고유 기능
		System.out.println("TreeSet 고유 기능");
		System.out.println(set.first());	//10
		System.out.println(set.last());		//50
		System.out.println(set.headSet(30));	//exclusive, 30미만의 값
		System.out.println(set.tailSet(30));	//inclusive, 30이상의 값
		System.out.println(set.subSet(20, 40));	//20이상 ~ 40미만
		System.out.println();
		
		
		//HashSet -> ArrayList
        System.out.println("HashSet -> ArrayList");
		ArrayList<Integer> list = new ArrayList<Integer>(set);
		System.out.println(list);
		
		Collections.sort(list);
		
		System.out.println(list);

TreeSet 요소목록:[10, 20, 30, 40, 50]
for문으로 탐색
10
20
30
40
50

iterator로 탐색
10
20
30
40
50

TreeSet 고유 기능
10
50
[10, 20][30, 40, 50]
[20, 30]

HashSet -> ArrayList
[10, 20, 30, 40, 50][10, 20, 30, 40, 50]

profile
웹백엔드개발자를 꿈꾸는

0개의 댓글