이 영역을 누르면 첫 페이지로 이동
나눔코딩 블로그의 첫 페이지로 이동

나눔코딩

페이지 맨 위로 올라가기

나눔코딩

11. 기술면접 - 자바 - 컬렉션 프레임워크 (Collection Framework)

  • 2021.10.21 13:48
  • ∞. 기술 면접/7. 자바
공부목적으로 다른 블로그의 글을 그대로 따라치면서 작성되었습니다. 저작권 문제 시, 비공개 처리하겠습니다

 

전체 구조

Collection   Map
  - List
    ㄴ 순서가 있음
    ㄴ 데이터 중복 가능

  - Set
    ㄴ 순서 없음
    ㄴ 데이터 중복 불가능
  - 검색할 수 있는 인터페이스
  - 데이터를 삽입할 때 Key와 Value 의 형태로 삽입되며, 
    Key를 이용해서 Value 을 얻을 수 있다
  - 선택과정
    1. Map과 Collection 인터페이스 중 선택
      1-1. Collection 선택 시 사용 목적에 따라 List, Set 선택
      1-2. List 선택 시, Linked 또는 Array 택

 

https://madplay.github.io/post/java-collection-synchronize

 

Map Collection
Set List
HashMap
Entry<k,v> 의 배열로 저장되며, 배열의 index는 내부함수를 통해 계산된다

내부 hash 값에 따라서 키순서가 정해지므로 특정 규칙 없이 호출된다

key, value에 null 값을 허용한다

비동기 처리

시간복잡도 O(1)
HashSet
저장 순서를 유지하지 않는 데이터의 집합

해시 알고리즘(Hash algorithm) 을 사용하여 검색속도가 매우 빠르다

내부적으로 Hash Map 인스턴스를 이용하여 요소를 저장한다
ArrayList
단방향 포인터 구조로 각 데이터에 대한 인덱스를 가지고 있어 데이터 검색에 적합하다

데이터의 삽입, 삭제 시 해당 데이터 이후 모든 데이터가 복사되므로 삽입, 삭제가 빈번한 데이터에는 부적합하다
LinkedHashMap
HashMap을 상속받으며, Linked List 로 저장된다

입력 순서대로 출력된다

비동기 처리

시간복잡도 O(n)
LinkedHashSet
저장순서를 유지하는 HashSet
LinkedList
양방향 포인터 구조로 데이터의 삽입, 삭제 시 해당 노드의 주소지만 바꾸면 되므로 삽입, 삭제가 빈번한 데이터에 적합하다

데이터의 검색 시 처음부터 노드를 순회하므로 검색에는 부적합하다

스택, 큐, 양방향 큐 등을 만들기 위한 용도로 쓰인다
TreeMap
내부적으로 레드-블랙 트리(Red-Black tree)로 저장된다

키값이 기본적으로 오름차순 정렬이 출력된다

키값에 대한 Compartor 구현으로 정렬 방법을 지정할 수 있다

시간복잡도 O(logN)
TreeSet
데이터가 정렬 된 상태로 저장되는 이진탐색 트리(BST)의 형태로 요소를 저장

이진 탐색 트리 중에 성능을 향상시킨 레드-블랙 트리(Red-Black Tree)로 구현되어 있다

Compartor 구현으로 정렬 방법을 지정

Vector
내부에서 자동으로 동기화 처리가 일어난다

성능이 좋지 않고 무거워 잘 쓰이지 않는다
ConCurrentHashMap
multiple lock

update 할 때만 동기(syncronized) 처리

key 와 value 에 null 값을 허용하지 않는다
   
HashTable
single lock
모든 메서드에 대해 동기처리
key와 value 에 null 값을 허용하지 않는다
   

 

[HashMap 과 HashSet의 차이] https://postitforhooney.tistory.com/entry/JavaHashSet%EA%B3%BC-HashMap

공통점 : 중복저장이 안된다
차이점 : hashmap 은 key 를 통해 저장하고 조회하는 데, hashset 은 해당타입으로 바로 넣고 iterator 또는 for문을 통해 조회한다

저작자표시 (새창열림)

'∞. 기술 면접 > 7. 자바' 카테고리의 다른 글

13. 기술면접 - 자바 - String, StringBuilder, StringBuffer  (0) 2021.10.22
12. 기술면접 - 자바 - 클래스, 객체, 인스턴스  (0) 2021.10.22
10. 기술면접 - 자바 - 인터페이스와 추상 클래스 차이  (0) 2021.10.21
09. 기술면접 - 자바 - 자바는 항상 CallByValue 이다  (0) 2021.10.21
08. 기술면접 - 자바 - 직렬화(Serializable)  (0) 2021.10.21

댓글

이 글 공유하기

  • 구독하기

    구독하기

  • 카카오톡

    카카오톡

  • 라인

    라인

  • 트위터

    트위터

  • Facebook

    Facebook

  • 카카오스토리

    카카오스토리

  • 밴드

    밴드

  • 네이버 블로그

    네이버 블로그

  • Pocket

    Pocket

  • Evernote

    Evernote

다른 글

  • 13. 기술면접 - 자바 - String, StringBuilder, StringBuffer

    13. 기술면접 - 자바 - String, StringBuilder, StringBuffer

    2021.10.22
  • 12. 기술면접 - 자바 - 클래스, 객체, 인스턴스

    12. 기술면접 - 자바 - 클래스, 객체, 인스턴스

    2021.10.22
  • 10. 기술면접 - 자바 - 인터페이스와 추상 클래스 차이

    10. 기술면접 - 자바 - 인터페이스와 추상 클래스 차이

    2021.10.21
  • 09. 기술면접 - 자바 - 자바는 항상 CallByValue 이다

    09. 기술면접 - 자바 - 자바는 항상 CallByValue 이다

    2021.10.21
다른 글 더 둘러보기

정보

나눔코딩 블로그의 첫 페이지로 이동

나눔코딩

  • 나눔코딩의 첫 페이지로 이동

검색

메뉴

  • 홈
  • 태그
  • 방명록

카테고리

  • 분류 전체보기 (316)
    • ∞. 읽은 거리 (3)
    • ∞. 기술 면접 (61)
      • 1. 자료구조 (0)
      • 2. 네트워크 (9)
      • 3. 운영체제 (11)
      • 4. 데이터베이스 (13)
      • 5. 디자인 패턴 (0)
      • 6. 알고리즘 (0)
      • 7. 자바 (15)
      • 8. 자바스크립트 (7)
      • 9. 스프링 (5)
      • 10. 시큐리티 (1)
      • 11. 기타 (0)
      • 12. Vue (0)
    • ∞. 웹개발 유용한 사이트 (14)
    • ∞. 트러블 슈팅 + TIL (7)
    • 00. 출발 (9)
    • 01. 엑셀 (9)
      • 기초 (4)
      • 컴활 1급 (4)
      • VBA (0)
    • 02. 엑세스 (9)
      • 기초 (5)
      • 컴활 1급 (4)
    • 04. Oracle (1)
      • 기초 (1)
    • 03. JAVA (8)
      • 기초 (7)
      • 객체지향 프로그래밍 (0)
    • 05. HTML (13)
      • 기초 (1)
      • css (10)
      • sass (0)
      • less (0)
    • 06. Javascript (16)
      • 기초 (13)
      • ES6 모듈 (2)
      • Canvas (0)
    • 07. JSP (0)
      • 기초 (0)
    • 08. jQuery (0)
      • 기초 (0)
    • 09. BootStrap (1)
      • 기초 (0)
      • v4 - Layout (1)
    • 10. Spring (30)
      • 기초 (3)
      • 실험 (4)
      • MVC (1)
      • BOOT (6)
      • Security (10)
      • Lib (Library) (2)
      • 벤치마킹 (0)
      • JUnit5 (2)
      • DevTools (0)
      • Socket (1)
      • Batch (0)
      • Mobile (0)
      • WebFlux (0)
      • Cloud (0)
      • Thymleaf (0)
      • Actuator (0)
      • 성능 테스트 (1)
    • 11. JetBrains (34)
      • 기초 (1)
      • IntelliJ IDEA (33)
      • WebStorm (0)
      • Pycham (0)
    • 12. API (0)
      • 기초 (0)
      • 네이버 API (0)
      • 카카오 API (0)
      • 구글 API (0)
      • 인스타그램 API (0)
    • 13. AutoHotkey (1)
    • 14. Python (8)
      • 기초 (3)
      • Selenium (2)
      • Beautiful Soup (0)
      • openpyxl (1)
      • Pyqt5 (0)
      • Deep learning (open CV) (0)
      • Geocoder (0)
      • Anaconda (0)
      • DeepLearning (0)
      • Jupyter Nootbook (0)
    • 14.5. R (0)
    • 15. JMeter (0)
      • 다운로드 (0)
    • 16. Vue JS (23)
      • 기초 (3)
      • Vue 2 (15)
      • Vue 3 (5)
      • Vuetify 2.5.8 (0)
    • 17. Git (12)
      • 기초 (8)
      • ItelliJ IDEA (4)
      • SourceTree (0)
    • 18. AWS (5)
      • 기초 (2)
      • Jira (3)
    • 19. Naver Cloud Platform (0)
    • 20. Google Cloud Platform (0)
      • 기초 (0)
      • stt & tts (0)
    • 21. Kotlin (0)
    • 22. Android (0)
      • 기초 (0)
      • Java (0)
      • Kotlin (0)
      • Flutter FrameWork (0)
    • 23. Clean Code [JAVA] (1)
    • 24. BuildTool (1)
      • Maven (1)
      • Gradle (0)
    • 25. 자료 구조와 알고리즘 (18)
      • JAVA (1)
      • Java Script (1)
      • 프로그래머스 (0)
      • 백준 알고리즘 (0)
      • 나의 알고리즘 (14)
      • Brilliant 공부 (0)
    • 26. React (1)
      • 기초 (0)
      • 강의 정리 (1)
    • 27. PostMan (0)
      • 기초 (0)
    • 28. 프로그래머스 (9)
    • 29. Leet Code (0)
    • 30. MySQL (3)
      • 기초 (2)
      • 문제 (1)
    • 73. GraphQL (0)
    • 74. Nuxt JS (0)
    • 75. Electron (0)
    • 76. UX &amp; UI Design Tool (0)
      • 기초 (0)
      • Axure (0)
      • Sketch (0)
      • Figma (0)
    • 77. MarkDown (1)
      • 기초 (1)
    • 78. Tomcat (1)
      • 메모 (1)
    • 79. Element JS (0)
    • 80. Parallax JS (0)
      • 기초 (0)
    • 81. Player JS (0)
      • 기초 (0)
    • 82. Smart Maker (0)
    • 83. Vim (0)
      • 기초 (0)
    • 84. Linux (0)
      • 기초 (0)
      • Centos 7 (0)
      • Ubuntu (0)
    • 85. Node JS (2)
      • 기초 (1)
      • WebRTC (0)
      • NVM (1)
    • 86. Propeller JS (0)
    • 87. FullPage JS (0)
      • 기초 (0)
    • 88. 아두이노 (0)
    • 89. Tensorflow (0)
    • 90. 웹 패킷 분석 (0)
    • 91. 크롬 개발자도구 (0)
    • 92. 디자인 패턴 (7)
      • 생성(Creational) (3)
      • 구조(Structral) (1)
      • 행위(Behavioral) (2)
      • SOLID 패턴 (0)
    • 95. Linux Shell Script (0)
    • 96. 구글 애널리스틱 (0)
    • 97. ffmpeg (0)
    • 98. ShareX (1)
    • 자료실 (0)
    • 기타 (2)

최근 글

인기 글

댓글

공지사항

아카이브

태그

  • 깁
  • 엑셀 분석작업
  • 엑셀 글씨
  • 졵
  • 엑셀 기타작업
  • 엑셀 가운데맞춤
  • 엑셀 표시형식
  • 엑셀 기본작업

나의 외부 링크

  • 비전공자 개발자
  • 자바 디자인 패턴
  • 자바 디자인 패턴
  • 스프링 블로그
  • 해킹보안 & 웹 관련
  • ERD 생성
  • 전문 기술 블로그
  • Servlet에 대한 개념없이 스프링을 했네요?
  • 스프링 FitlerChainList
  • 알고리즘 파워 블로그

정보

THE HEYDAZE의 나눔코딩

나눔코딩

THE HEYDAZE

블로그 구독하기

  • 구독하기
  • RSS 피드

방문자

  • 전체 방문자
  • 오늘
  • 어제

티스토리

  • 티스토리 홈
  • 이 블로그 관리하기
  • 글쓰기
Powered by Tistory / Kakao. © THE HEYDAZE. Designed by Fraccino.

티스토리툴바