키보드워리어

[자바] Set 자료구조 살펴보기 본문

JAVA/입문

[자바] Set 자료구조 살펴보기

꽉 쥔 주먹속에 안경닦이 2023. 4. 11. 07:05
728x90

안녕하세요 【키보드 워리어】

 

⌨🗡🧑


블로그 방문자 여러분, 안경닦이입니다.

 

오늘은 SET 에 대해 알아보겠습니다.


HashSet,LinkedHashSet,TreeSet

Set은 순서나 위치가 없는 인터페이스로, 중복이 없는 유일한 것만 가질 수 있습니다.

 

예를 들어, "A", "B", "C", "B" 라는 문자열이 있을 때, Set은 "A", "B", "C" 라는 유일한 값만 가질 수 있습니다.

따라서, 같은 요소를 추가하면 추가되지 않는 Set의 특징이 있습니다.

 

A collection that contains no duplicate elements

 

같은 요소는 추가 불가
같은 요소는 추가 불가

Set 인터페이스를 구현하는 클래스로는 HashSet, LinkedHashSet, TreeSet 등이 있습니다.

HashSet은 저장된 순서나 정렬과 상관 없이 저장되는 클래스이고,

LinkedHashSet은 저장된 순서를 유지하지만 정렬은 지원하지 않는 클래스입니다.

마지막으로 TreeSet은 저장된 순서는 없지만, 정렬된 상태로 저장됩니다.

 

 

예를 들어, List<Character>로 "Keyboardwarrior"라는 문자열을 만들고 이를 HashSet, LinkedHashSet, TreeSet으로 변환하면, HashSet은 순서나 정렬이 없이 저장되지만, LinkedHashSet은 저장된 순서가 유지되며 정렬은 지원하지 않고, TreeSet은 저장된 순서는 없지만, 정렬된 상태로 저장됩니다.

Set은 유일한 결과를 원한다면, Set 인터페이스를 구현하는 클래스를 사용하고 정렬된 순서를 생각하면서 적절히 사용하시면 됩니다.

 

 

 

메서드 활용

 

TreeSet 클래스는 SortedSet 인터페이스를 구현하므로, 이 인터페이스의 메서드들을 사용할 수 있습니다.

 

1.floor(E e): 주어진 값보다 작거나 같은 바로 아래의 값 리턴, 없으면 null 리턴

TreeSet<Integer> numbers = new TreeSet<>();
numbers.add(1);
numbers.add(3);
numbers.add(5);

Integer floorValue = numbers.floor(4);
System.out.println(floorValue); // 3

 

 

2. lower(E e): 주어진 값보다 작은 바로 아래의 값 리턴, 없으면 null 리턴

TreeSet<Integer> numbers = new TreeSet<>();
numbers.add(1);
numbers.add(3);
numbers.add(5);

Integer lowerValue = numbers.lower(4);
System.out.println(lowerValue); // 3

같은 원리이지만 같은 값을 포함하는 ceiling,higher 메서드도 있습니다!

 

 

3. subSet(E fromElement, E toElement): fromElement 이상, toElement 미만인 범위의 Set 리턴

TreeSet<Integer> numbers = new TreeSet<>();
numbers.add(1);
numbers.add(3);
numbers.add(5);

SortedSet<Integer> subset = numbers.subSet(2, 5);
System.out.println(subset); // [3]

 

 

4. headSet(E toElement): toElement 미만인 범위의 Set 리턴

TreeSet<Integer> numbers = new TreeSet<>();
numbers.add(1);
numbers.add(3);
numbers.add(5);

SortedSet<Integer> headSet = numbers.headSet(4);
System.out.println(headSet); // [1, 3]

 

 

5. tailSet(E fromElement): fromElement 이상인 범위의 Set 리턴

TreeSet<Integer> numbers = new TreeSet<>();
numbers.add(1);
numbers.add(3);
numbers.add(5);

SortedSet<Integer> tailSet = numbers.tailSet(4);
System.out.println(tailSet); // [5]

 

 
728x90