오늘 이거 알았네요/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