😀
Hyune's Wiki
  • Welcome
  • Article
    • Link
  • Mentor & Code Reviewer
    • 진행하기에 앞서..
    • Code Review History
      • 한방 쿼리 vs 애플리케이션에서 조립
      • DB에서 TIMESTAMP와 DATETIME 타입의 차이
      • Service는 어떤 dto를 반환해야 할까?
        • 확장 질문
  • Legacy
    • 실무 경험 & 팁
      • Kotlin
        • 파일 조작하기
      • Infra
        • Lightsail
          • 인스턴스 구성 예제
        • 공인 ip 확인하기
      • Database
        • INSERT INTO SELECT SHARED LOCK(row LOCK)
      • API Document
        • OpenAPI (Swagger 3.0)
          • 정적 문서 내보내기
      • Side Project
        • Codesquad
      • ETC
        • HTTP Request 추적하기 with HAR File
    • Study
      • Language
        • Java
          • Copy
          • 메모리 관리
          • Garbage Collection
          • 자료구조
          • Java 17
        • Kotlin
          • Coroutine
      • Framework & Library
        • Spring
          • Spring Security
          • @Component vs @Configuration
        • JPA
          • show-sql 설정의 단점
          • @GeneratedValue strategy
          • Entity의 field type
        • Logback
          • 기본 설정
        • Monitoring
          • VisualVM
            • 설치
            • 문자열 생성으로 테스트
          • nGrinder
      • Database
        • MySQL
          • SQL 문 수행 절차
          • 트랜잭션과 잠금
          • 인덱스
      • Infra
        • AWS
          • S3
            • 용어
            • Amazon SDK 1.x with Spring
          • DynamoDB
            • Get vs Query vs Scan
        • Docker & Kubernetes
      • Computer Science
        • OS
          • Process vs Thread
          • Process
        • Web
          • HTTP
            • HTTP vs HTTPS
            • HTTP 구성
            • HTTP 그외
          • REST API
            • GET 메서드에 payload를 사용해도 되는가?
            • 특정 목적의 API는 어떻게 만들어야 할까?
          • TCP / UDP
          • 인터넷의 작동 원리
          • OAuth 2.0
        • Design Pattern
          • Builder Pattern
        • MSA
        • DDD
      • Test
        • Test Doule
      • Book & Online Class
        • 한 번에 끝내는 Spring 완.전.판 초격차 패키지 Online
          • AOP, Aspect Oriented Programming
          • Data Binding
          • IoC(Inversion of Control), DI(Dependency Injection)
          • Null Safety
          • Spring Resource
          • Spring Boot 버전별 변화
          • SpEL, Spring Expression Language
          • Validation
        • 이펙티브 자바 3판
          • 2장 객체 생성과 파괴
            • 아이템 1. 생성자 대신 정적 팩터리 메서드를 고려하라
            • 아이템 2. 생성자에 매개변수가 많다면 빌더를 고려하라
            • 아이템 3. private 생성자나 열거 타입으로 싱글턴임을 보증하라
            • 아이템 4. 인스턴스화를 막으려거든 private 생성자를 사용하라
            • 아이템 5. 자원을 직접 명시하지 말고 의존 객체 주입을 사용하라
            • 아이템 7. 다 쓴 객체 참조를 해제하라
          • 3장 모든 객체의 공통 메서드
            • 아이템 11. equals를 재정의하려거든 hashCode도 재정의하라
            • 아이템 12. toString을 항상 재정의하라
            • 아이템 14. Comparable을 구현할지 고려하라
          • 4장 클래스와 인터페이스
      • Webinar
        • 요즘 힙한 스타트업의 DBDB DEEP한 이야기
Powered by GitBook
On this page

Was this helpful?

Edit on GitHub
  1. Legacy
  2. Study
  3. Language
  4. Java

자료구조

PreviousGarbage CollectionNextJava 17

Last updated 3 years ago

Was this helpful?

Interface
Desc
구현 클래스

Collection

List

순서 보장, 중복 가능

ArrayList, Vector, LinkedList

Set

순서를 보장 불가, 중복 불가

HashSet, TreeSet

Queue

FIFO(First In First Out) 구조

ArrayDeque, PriorityQueue

Map

Key 중복 불가, Key - Value 를 쌍으로 저장

HashMap, HashTable, TreeMap, Properties

TreeMap vs HashMap

HashMap
TreeMap

Extends Implementation

AbstractMap, Map

AbstractMap, NavigableMap

Null Key

Yes

No

Multiple Null Values

Yes

Yes

<Key, Value> Order

No

Natural Ordering

Synchronized

No

No

Complexity

O(1)

O(logN)

  • HashMap 의 capacity (bucket) 이 충분히 커지는 경우 TreeMap 과 유사한 상태가 됩니다.

    • 공간배치를 다시하는 rehashing 을 할 수 있지만 큰 부하가 걸립니다.

  • TreeMap 이 NullKey 를 가질 수 없는 이유

    • Key 가 Null 이면 ordering 시 NullPointerException 이 발생합니다.

LinkedHashMap

순서가 보장되는 HashMap

  • LinkedHashMap (int initialCapacity, float loadFactor, boolean accessOrder)

    • (저장된 데이터의 수 > capacity * load_factor) 가 되면 rehasing 가 수행됩니다.

    • boolean accessOrder

      • true : 접근이 적은 순서대로 저장됩니다. (access-order)

      • false : 입력한 순서대로 저장됩니다. (insertion-order)

  • removeEldestEntry (Map.Entry<K,V> eldest)

    • 생성자의 accessOrder 값에 따라 가장 오래된 <K,V> 를 삭제 합니다.

  • getOrDefault(Object key, V defaultValue)

    • Optional 을 대신할 수 있는 메소드로 key 를 찾지 못할 경우 defaultValue 를 리턴합니다.