오늘 이거 알았네요/Java

[Java] 자료구조에 대해 아는대로 정리하기

로그관리자 2023. 8. 18. 16:30
728x90

array와 LinkedList, ArrayList의 초기 사이즈 지정

  • array는 배열 선언 시 크기를 지정해야 한다
  • LinkedList나 ArrayList는 동적으로 크기를 관리한다. ( Set, Map의 구현체들도 마찬가지)
  • 자바 컬렉션 프레임워크의 설계 원칙 중 하나인 "크기 조절 가능한 컨테이너" 원칙을 따른다.
    따라서 초기에 크기를 명시적으로 지정할 필요가 없다.

 

LinkedList와 ArrayList, Vector까지

우선 셋 다 List인터페이스를 구현한 구현체이다.

ArrayList

  • 초기에 일정한 크기 (보통 10)을 가지고 시작
  • 데이터의 삽입 / 삭제가 빈번한 상황에서 성능이 좋다
  • 데이터 접근 시 인덱스를 이용하여 빠른 속도
  • 중간에 삽입 / 삭제 시 새 배열에 저장하기 때문에 데이터 이동으로 성능이 떨어질 수 있다.

LinkedList

  • 초기 크기에 대한 개념이 없다.
  • 데이터 접근보다 삽입 / 삭제가 중요한 상황에서 성능이 좋다.
  • 데이터 접근 / 검색 시 인덱스 사용하지 않고 처음부터 해당 위치까지 차례로 이동해야 해서 검색 속도가 상대적으로 느릴 수 있다.
  • 데이터 삽입 / 삭제 시 데이터 이동이 필요하지 않다.

Vector

  • ArrayList와 유사하지만 thread-safe 한 버전이다
  • 여러 스레드가 동시에 접근 시 동기화를 보장하며 thread-safe를 제공한다.
  • 성능면에서 ArrayList보다 느릴 수 있다.
  • 크기를 동적으로 조절 가능하다.

→최근에는 concurrent 컬렉션이 더 선호되고 있다.

Concurrent Collection

  • thread-safe 컬렉션 클래스의 집합
  • 여러 스레드가 동시에 접근하거나 수정해도 데이터의 일관성, 안전성이 유지되도록 동기화 처리된다.
  • 동시처리를 위해 lock을 사용하는 대신 세분화된 동기화 메커니즘을 활용하여 성능을 최적화, 블로킹을 최소화한다.
  • ConcurrentHashMap, ConcurrentLinkedQueue, CopyOnWriteArrayList etc…

 

 

HashMap, HashSet, LinkedHashMap, LinkedHashSet

 

HashMap

  • Key, Value로 이루어져 있다.
  • Key는 고유함, Value는 중복이 가능하다.
  • 데이터를 Hash bucket에 저장하여 빠른 검색 속도를 제공한다.
  • 하지만 데이터의 순서는 보장하지 않는다.

LinkedHashMap

  • 데이터의 순서를 제공하면서 빠른 속도를 제공
  • 삽입 순서에 대한 추가적인 메모리 공간을 사용하게 되므로 리소스가 조금 더 든다.

HashSet

  • 중복을 불허한다.
  • 검색이 빠르다.
  • 데이터의 순서도 보장하지 않는다.

LinkedHashSet

  • 중복 값을 허용하지 않는다.
  • 삽입 순서대로 데이터를 유지한다.
  • HashSet보다는 느리지만(삽입 순서에 대한 추가적인 메모리 공간을 사용) 순서 기능을 보장한다.
728x90