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

2023. 8. 17. 20:59·항해

자바의 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
'항해' 카테고리의 다른 글
  • WIL : JVM이란 무엇인가?
  • JAVA_형변환(casting) 정리!
  • 트러블슈팅_reached end of file while parsing
  • 무한 루프 트러블 슈팅
yeah구리
yeah구리
백엔드를 공부하는 초심자입니다.
  • yeah구리
    개발일지_헤맨만큼 내땅이다
    yeah구리
  • 전체
    오늘
    어제
    • 분류 전체보기 (114)
      • 스파르타 부트캠프(spring) (75)
      • 스파르타 기술면접 (10)
      • 코딩연습 (0)
      • 항해 (10)
      • 개발일지 (4)
        • 개인 회고 (1)
        • 개발로그 (실무) (2)
      • 공부노트 (0)
      • 코딩테스트 (0)
        • 프로그래머스 (0)
        • 백준 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    비전공개발자 #개발로그 #커리어
    X(Twitter) API #캐싱 #트러블슈팅 #개발
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
yeah구리
트러블슈팅 Set 자료구조 사용_순서 관련 문제
상단으로

티스토리툴바