본문 바로가기
카테고리 없음

자바 컬렉션 정리 (1) - Set

by 위시우 2024. 1. 30.

오늘부터 java 의 Collection 을 뽀개보는 시간을 가져보겠다.
오늘의 주인공은 Set.

Set 이라는 interface 에, Set 의 구현체인 HashSet, TreeSet, LinkedHashSet 을 알아보고자 한다.

Set

  1. 중복을 허용하지 않는다. 어릴때 배웠던 집합처럼 중복된 요소를 인정하지 않기 때문에, 이미 set 에 존재하는 요소를 추가하려고 하면 무시된다.
  2. 순서 없습니다. 요소의 순서를 보장하지 않는다. HashSet 의 경우, 순서가 변경될 수 있다.
  3. Indexing 없다 : Array, List 와 다르게 인덱싱을 제공하지 않는다.
  4. Primitive type을 저장할 수 없다. : Set 은 ArrayList, Map 과 함꼐 wrapper class 만 저장할 수 있습니다. (Int, long, double 등은 저장할 수 없다.)

주요한 Set 의 인터페이스에는 HashSet, TreeSet, LinkedHashSet 가 있다.
TreeSet, LinkedHashSet 은 기본적으로 HashSet 과 사용법이 유사하므로, HashSet 으로 Set 의 method 사용법을 대체한다.

HashSet

  1. 순서가 보장되지 않는다.
  2. Hash 테이블 구조를 사용하여 요소를 저장하므로 요소에 대한 빠른 액세스 시간을 제공한다.

메서드 정리

add() : 원소를 추가한다.

import java.util.HashSet;

public class Main {
    public static void main(String[] args) {
        HashSet<String> cars = new HashSet<String>();
        cars.add("Volvo");
        cars.add("Toyota");
        cars.add("Mazda");
    }
}

remove() : 특정 원소를 제거한다.

cars.remove("Volvo);

contains() : 포함 여부 확인

cars.contains("Volvo");  // false 

 

TreeSet

  1. 중복이 허용되지 않는다.
  2. 입력 순서에 따라 순서를 보장하지 않는다.
  3. 원소는 오름차순에 따라 원소를 저장한다.
  4. Thread-safe 하지 않다.
import java.util.Set;
import java.util.TreeSet;

public class TestTreeSet {
    public static void main(String[] args) {
        Set<String> treeSet = new TreeSet<>();
        treeSet.add("zebra");
        treeSet.add("kangaroo");
        treeSet.add("ant");

        for (String s : treeSet) {
            System.out.println(s);
        }
    }
}

// 실행결과(알파벳 오름차순으로 출력된다.)
// ant
// kangaroo
// zebra

LinkedHashSet

  • 입력 순서를 지킨다.
  • HashSet 의 자손 객체다.
  • TreeSet 보다는 복잡성이 떨어진다.
    public class TestLinkedHashSet {
      public static void main(String[] args) {
          Set<Integer> intSet = new LinkedHashSet<>();
          intSet.add(5);
          intSet.add(4);
          intSet.add(3);
          intSet.add(2);
          intSet.add(1);
    
          // Iterator 생성
          Iterator<Integer> it = intSet.iterator();
    
          while (it.hasNext()) {
              System.out.println(it.next());
          }
      }
    }
    // 출력
    // 5
    // 4
    // 3
    // 2
    // 1

참고 자료

https://www.baeldung.com/java-linkedhashset

https://www.geeksforgeeks.org/hashset-vs-treeset-in-java/

 

HashSet vs TreeSet in Java - GeeksforGeeks

A Computer Science portal for geeks. It contains well written, well thought and well explained computer science and programming articles, quizzes and practice/competitive programming/company interview Questions.

www.geeksforgeeks.org

https://www.w3schools.com/java/java_hashset.asp

 

Java HashSet

W3Schools offers free online tutorials, references and exercises in all the major languages of the web. Covering popular subjects like HTML, CSS, JavaScript, Python, SQL, Java, and many, many more.

www.w3schools.com

https://hak0205.com/entry/%EA%B0%9C%EB%85%90-%EC%9E%90%EB%B0%94-set-%EC%82%AC%EC%9A%A9%EB%B2%95-%EC%B6%9C%EB%A0%A5-%EC%A0%95%EB%A0%AC-JAVA

 

[ 개념 ] 자바 set 사용법 출력 정렬 - JAVA

set 이란 자바에서 집합은 중복 요소를 허용하지 않는 Collection입니다. set 인터페이스는 HashSet, TreeSet, LinkedHashSet을 포함한 자바의 여러 클래스에 의해 구현됩니다. set 특징 중복 요소를 허용하지

hak0205.com

 

댓글