본문 바로가기

웹개발/JAVA

[JAVA] Collection - Set(HashSet, TreeSet)

* 계층 구도

         Collecitons<E>

                   Set<E>

                            HashSet<E>, TreeSet<E>

 

 

Set

  1. 자료의 중복 저장이 허용되지 않음(hashCode() 값의 중복여부!로 판단)
  2. 저장 순서가 유지되지 않음 -> 인덱스가 없다

 

HashSet vs. TreeSet

- HashSet : 매우 빠른 검색 속도를 제공(검색 속도에 특화)

        +) Hashxxxx : 검색속도 향상을 위해 쓰는 자료구조

- TreeSet : 정렬에 특화

 

HashSet

// Collection06Main.java

package collection06;

import java.util.HashSet;
import java.util.Iterator;

public class Collection06Main {

	public static void main(String[] args) {
		System.out.println("HashSet 클래스");
		
		// Integer 타입을 저장할 수 있는 HashSet 인스턴스 생성
		HashSet<Integer> set = new HashSet<>();
		
		// 데이터 저장: add()
		set.add(100);
		
		// HashSet의 크기: size()
		System.out.println("Set<>의 크기:"+set.size());
		
		// Set은 중복 저장을 허용하지 않는다.
		
		// 데이터 검색:
		// Set은 인덱스가 없기 때문에(=순서가 없기 때문에) get() 메소드를 제공하지 않습니다.
		// 데이터 검색을 위해서는 Iterator를 사용해야 함
		System.out.println();
		Iterator<Integer> itr = set.iterator();
		while(itr.hasNext()) {
			System.out.println(itr.next());
		}
		
		// 데이터 삭제
		// remove(element): Set에 있는 element를 찾아서 삭제
		//   element 있다면 삭제 후 true를 리턴
		//   element 없다면 false 리턴
		System.out.println("삭제 결과: "+set.remove(2));
		
		// Set 자료형 데이터 변경을 할 수 있는 set() 메소드를 제공하지 않습니다.
		// 삭제(remove) 후 추가(add)하면 변경하는 효과
		// TODO : 500 -> 555 로 변경하고 싶다면?
		set.remove(500);
		set.add(555);
		
		// enhanced-for 사용
		System.out.println();
		System.out.println("Enhanced for 사용 출력");
		for(int i : set) {
			System.out.println(i);
		}
		
		// forEach() 메소드 사용
		System.out.println();
		System.out.println("forEach() 사용 출력");
		set.forEach(System.out::println);
		
		
		// toString() 제공됨
		System.out.println(set);
		
		System.out.println("\n프로그램 종료");
	} // end main()

} // end class

 

TreeSet

- 오름차순으로 저장이 됨

// Collection09Main.java
package collection09;

import java.util.Iterator;
import java.util.TreeSet;


public class Collection09Main {

	public static void main(String[] args) {
		System.out.println("TreeSet 클래스");
		
		// Integer 타입을 저장할 수 있는 TreeSet 인스턴스 생성
		TreeSet<Integer> tset = new TreeSet<>();
		
		// 데이터 저장 : add()
		tset.add(11);
		tset.add(2);
		tset.add(14);
		tset.add(1);
		tset.add(7);
		tset.add(15);
		tset.add(5);
		tset.add(9);
		
		// 데이터 검색 - Iterator 사용
		// TreeSet인 경우에 iterator() 메소드 오름차순 정렬
        // values are automatically stored in ascending order 
		System.out.println("오름차순:");
		Iterator<Integer> itr = tset.iterator();
		while(itr.hasNext()) {
			System.out.println(itr.next());
		}
		
		
		System.out.println();
		System.out.println("내림차순:");
		// 내림차순 Iterator : descendingIterator() 사용
		itr = tset.descendingIterator();
		while(itr.hasNext()) {
			System.out.println(itr.next());
		}
		
		// enhanced for
		System.out.println();
		System.out.println("enhanced for");
		for(int i : tset) {
			System.out.println(i);
		}
		
		System.out.println("\n프로그램 종료");
	} // end main()

} // end class