본문 바로가기

항해

트러블슈팅 Set 자료구조 사용_순서 관련 문제

자바의 collection 관련 공부

 

 

레시피 메모장을 만들면서 생긴 의문점

-> 다른 자료구조 List, Map은 잘 작동하는데 Set이 값을 넣은 순서대로 출력하지 않고 있다는 것을 확인할 수 있었다.

 

 

이렇게 넣어준 순서대로가 아니게 값이 출력되는 것을 확인할 수 있었다.

 

Set은 순서가 보장되지않는 자료구조라 입력한 순서대로 저장되지 않을 수 있다. 만약 입력한 순서대로 저장되어야 한다면 HashSet 대신 LinkedHashSet을 사용!  → LinkedHashSet은 입력한 순서대로 요소가 저장되는 Set의 종류

 

아래와 같이 코드를 수정하여 LinkedHashSet을 사용하였다.

 

 

위 코드에서 Set<String> strSet = new LinkedHashSet<>(); 부분을 사용하여 LinkedHashSet을 생성.

LinkedHashSet을 사용하면 입력한 순서대로 요소가 저장되어 출력되었다.

 

값을 집어넣은 순서대로 출력이 되는 것을 확인. 잘 작동이 되었다.

 

 

✅ 'Set' 자료구조

Set은 자바 컬렉션 자료구조로 중복된 요소를 허용하지 않는 집합(Set) 자료구조를 구현하는데 사용된다.

 

  1. 'Set' 인터페이스 :
    · 'Set'은 중복된 요소를 허용하지 않는 순서가 없는 컬렉션
    · 주요 구현 클래스 : 'HashSet' / 'LinkedHashSet' / 'TreeSet' 등
  2. 'HashSet' 클래스 :
    · 'HashSet'은 해시테이블을 사용하여 요소를 저장하는 'Set'의 구현 클래스
    · 순서를 보장하지 않아 요소가 저장된 순서대로 반복되지 않을 수 있음
    · 중복된 요소 허용 X
    · 빠른 추가, 제거, 포함 여부 확인이 가능함
  3. 'LinkedHashSet' 클래스 : 
    · 'LinkedHashSet'은 해시테이블과 연결리스트를 사용하여 요소를 저장하는 'Set'의 구현클래스
    · 입력한 순서대로 요소가 저장되어 순서를 보장
    · 'HashSet'과 유사하게 요소 추가, 제거, 포함 여부 확인은 빠름
  4. 'TreeSet' 클래스 :
    · 'TreeSet'은 이진 검색 트리를 사용하여 요소를 저장하는 'Set'의 구현클래스
    · 요소들이 자동으로 정렬저장되며, 순서를 보장함
    · 중복된 요소를 허용하지 않음
    · 정렬된 순서를 유지하면서 데이터를 저장하고 싶을 때 유용함
  따라서, 요소의 순서가 중요한 경우에는 LinkedHashSet을 사용. 

  만약 정렬된 순서를 유지하거나 이진 검색 트리를 활용해야 한다면 
TreeSet을 사용.

https://github.com/Jang-JIye/FirstJava/blob/master/src/week02/Recipes02.java

 

'항해' 카테고리의 다른 글

모듈화가 필요한 이유  (0) 2023.08.21
WIL : JVM이란 무엇인가?  (0) 2023.08.21
JAVA_형변환(casting) 정리!  (0) 2023.08.18
트러블슈팅_reached end of file while parsing  (0) 2023.08.16
무한 루프 트러블 슈팅  (0) 2023.08.14