• Set, HashSet, LinkedHashSet, TreeSet 사용법 & 간단 사용 예제

    2021. 10. 31.

    by. 순일

    Set : 중복 값을 삽입할 수 없고, 특정한 순서를 가지고 있지 않다는 특징이 있다.

    HashSet : Set 인터페이스의 구현 클래스다. 순서가 유지되지 않고 넣은 값의 hashcode에 따라 순서가 나온다.

    LinkedHashSet : 중복을 허용하지 않지만 add 한 순서대로 값이 저장된다.

    TreeSet : 오름차순으로 값을 정렬해 가지고 있으며, 다른 set보다 대량의 데이터 검색 시 빠르다.

    import java.util.Collections;
    import java.util.HashSet;
    import java.util.Iterator;
    import java.util.LinkedHashSet;
    import java.util.NavigableSet;
    import java.util.Set;
    import java.util.TreeSet;
    
    public class SetTest {
    
    	public static void main(String[] args) {
    		Set<Integer> set = new HashSet<>();
    		set.add(1);
    		set.add(2);
    		set.add(2);
    		set.add(3);
    		System.out.println(set);
    		Iterator<Integer> ite = set.iterator();
    		while(ite.hasNext()) {
    			System.out.print(ite.next() + " ");
    		}
    		System.out.println();
    		System.out.println();
    		
    		LinkedHashSet<Integer> linkedHashSet = new LinkedHashSet<>();
    		linkedHashSet.add(3);
    		linkedHashSet.add(1);
    		linkedHashSet.add(7);
    		System.out.println(linkedHashSet);
    		System.out.println();
    		
    		TreeSet<Integer> treeset = new TreeSet<>();
    		treeset.add(4);
    		treeset.add(1);
    		treeset.add(8);
    		treeset.add(2);
    		System.out.println(treeset);
    		NavigableSet<Integer> se =  treeset.descendingSet();
    		System.out.println(se);
    		TreeSet<Integer> treeset2 = new TreeSet<>(Collections.reverseOrder());
    		treeset2.add(4);
    		treeset2.add(1);
    		treeset2.add(8);
    		treeset2.add(2);
    		System.out.println(treeset2);
    	}
    }

     

    실행 결과

     

    set은 get 메 서드가 따로 없어서 데이터를 가져와서 사용하거나 할 경우 Iterator를 사용해 주어야 한다.

    Iterator<Integer> ite = set.iterator();

    while(ite.hasNext()){ }를 사용하게 되면 값이 있으면 true를 반환해 주어 반복문을 돌릴 수 있고,

    ite.next() 메서드를 사용해 값을 가져올 수 있다

    특이한 점이 그냥 값을 가져오는 줄 알았는데 값을 사용하고 나면 해당 값이 삭제된다... 신기

     

    TreeSet은 기본 오름차순 정렬인데 내림차순으로 한번 해보려고 여러 검색을 해보았는데,

    NavigableSet<Integer> se = treeset.descendingSet(); 이런 식으로 NavigableSet<Integer>을

    통해서도 가능하며 애초에 선언문에서 선언을 해줄 때 내림차순 선언을 해주는 방법도 있다.

     

    TreeSet<Integer> treeset2 = new TreeSet<>(Collections.reverseOrder());

    TreeSet<Integer> treeset2 = new TreeSet<>((a, b) -> b-a);

    2가지 방법이 있는데 람다식보다 reverseOrder()가 속도가 더 빠르다고 어디서 본 적이 있다.

     

     

    728x90

    댓글