Just Do It

Collection_1

by 핫도구
반응형

Collection Framework에서 List, Set, Map 3개의 Interface를 구성하였다.

Interface 특징
List 순서가 있고 데이터 중복 허용
ArrayList, LinkedList, Stack,Vector 등
Set 순서가 없고 데이터 중복 없음
HashSet, TreeSet 등
Map key와 value로 이루어진 집합이며 순서 없고 key는 중복 허용되지 않고 value는 중복허용한다.
HashMap, TreeMap 등

오늘은 List, Set, Map을 크게크게 알아볼 예정이다.


List

 

List의 특징
1. List 인터페이스 구현
  - 인덱스를 통해 요소에 접근 할 수 있음
2. 중복 허용
  - 중복된 값을 저장 가능
3. 순서 보장
  - 요소를 추가한 순서대로 저장
4. 동적 크기 조정
  - 요소가 추가하면 크기가 자동으로 증가하고 삭제하면 크기가 줄어든다.

 

  ArrayList LinkedList Vector Stack
내부구조 동적배열 이중연결리스트 동적배열 Vector의 확장으로 후입선출구조
랜덤접근 빠름 느림 빠름 빠름
요소추가 및 제거 끝에 추가시 빠르며 중간에 삽입 및 삭제 시 느림 중간에 삽입 및 삭제 빠름 끝에 추가시 빠르며 중간 삽입 및 삭제는 느림 push(), pop() 메서드로 후입선출방식
메모리 사용 배열 크기 동적 조정, 메모리 절약 각 요소가 이전/다음 요소를 참조하므로 더 많은 메모리 사용 동적 배열, 내부적으로 동기화됨 Vector를 상속받아 동기화됨
동기화 동기화되지 않음 동기화되지 않음 내부적으로 동기화됨 내부적으로 동기화됨
읽기작업성능 빠름 느림 빠름 빠름
쓰기작업성능 중간삽입및삭제 느림 삽입 및 삭제가 빠름 동기화로 인한 성능 저하 후입선출방식이라 쓰기작업은 빠르지만 pop()의 호출과 관련이 있음
주요용도 읽기작업이 많고 데이터 크기가 자주 변하지 않거나 자주 재배열되지 않는 경우 삽입 및 삭제가 빈번하게 발생하는 경우 멀티스레드 환경에서 안전하게 사용해야하는 경우 후입선출방식이 필요한 경우

ArrayList

  • 장점: 빠른 읽기 작업과 인덱스를 통한 랜덤 접근이 가능하며 크기가 동적으로 조정되므로 크기를 미리 설정할 필요가 없다.
  • 단점: 중간에 요소를 삽입하거나 삭제할 때 성능이 떨어지며 메모리를 절약하기 위한 동적 배열 재조정 시 추가 비용이 발생할 수 있다.

LinkedList

  • 장점: 삽입 및 삭제가 빠르며, 리스트의 중간에 데이터를 추가하거나 삭제하는 데 유리함
  • 단점: 읽기 작업 시 인덱스를 통해 랜덤 접근이 느리며, 각 요소가 이전/다음 요소를 참조하므로 메모리 사용이 더 많이 필요함.

Vector

  • 장점: ArrayList와 유사하지만, 내부적으로 동기화가 지원되므로 멀티스레드 환경에서 안전하게 사용할 수 있다.
  • 단점: 동기화에 따른 성능 저하가 발생할 수 있어, 현재는 ArrayList가 더 많이 사용됨

Stack

  • 장점: 후입선출 방식으로, push(), pop() 메서드를 통해 데이터를 다룰 수 있다.
  • 단점: Vector를 상속받아 동기화가 포함되어 있어 성능이 떨어질 수 있다.

 


Set
Set의 특징
1. 중복된 요소를 허용하지 않음
2. 일반적으로 순서가 보장되지 않음
3. 순차적 접근만 가능하다.
4. null값이 허용된다.
  - 하지만 중복된 요소가 허용되지 않기 떄문에 null값은 1개만 존재할 수 있다.
  HashSet LinkedHashSet TreeSet EnumSet CopyOnWriteArraySet
중복허용 불가 불가 불가 불가 불가
순서보장 안됨 삽입순서유지 정렬된 순서 유지 열거형의 순서 유지 삽입순서유지
사용 예 일반적인 집합 순서가 중요한 집합 정렬된 순서가 중요한 집합 열거형에 대한 집합 연산 멀티스레드 환경에서 사용

HashSet

  • 장점: 빠른 성능으로 데이터 처리 가능하며 해시테이블 기반으로 메모리 효율성이 높다.
  • 단점: 순서가 보장되지 않으며 해시함수가 잘못 설계되면 해시 충돌로 인해 성능이 저하될 수 있다.

LinkedHashSet

  • 장점: 삽입순서대로 순서가 보장이 되어 순서가 중요한 경우 유용하며 빠른 성능을 제공한다.
  • 단점: 많은 메모리를 사용하며 HashSet보다 약간 느릴 수 있다.

TreeSet

  • 장점: 자동으로 오름차순으로 정렬하여 저장하기 때문에 정렬된 순서가 중요한 경우 유용하며 검색 시 범위 선택에 유리
  • 단점: 성능이 느리며 메모리사용량이 상대적으로 많다.

EnumSet

  • 장점: 열거형(Enum)타입에 최적화되었기에 매우 빠르고 메모리 효율적이며 저장시 열거형타입의 경우 매우 효율적으로 메모리 사용
  • 단점: 열거형(Enum)타입만 지원하기 때문에 범용성이 떨어짐

CopyOnWriteArraySet

  • 장점: 멀티스레드 환경에서 안전하게 사용할 수 있고 읽기작업이 많은 경우 유용하다.
  • 단점: 쓰기성능에 적합하지 않으며 배열복사본을 매번 생성하므로 메모리 사용량이 증가할 수 있다.

Map
Map의 특징
1. key-value의 쌍으로 저장
2. 중복 key를 허용하지 않음
3. 중복 value를 허용
4. key를 사용한 빠른 접근 가능
  HashMap TreeMap LinkedHashMap WeakHashMap
순서보장 없음(랜덤순서) 키 순서대로 정렬 삽입순서대로 유지 없음
정렬기준 없음 키 기준 자동정렬(오름차순) 삽입 순서대로 유지 없음
'null' key값 허용유무 허용 불가 허용 불가
'null' value값 허용유무 허용 허용 허용 허용
대표적인 사용 예 빠른 조회, 삽입 필요 정렬된 키가 필요한 경우 순서가 중요한 경우 가비지컬랙션 관리가 필요한 경우

HashMap

  • 장점: 빠른 성능으로 데이터 처리 가능하며 key와 value 값이 null을 허용하여 유연적
  • 단점: 순서를 보장하지 않고 일정한 메모리 오버헤드가 발생할 수 있음

TreeMap

  • 장점: key를 자동으로 정렬하므로 key의 순서가 중요한 경우 유용하며 특정 범위 내 key값을 쉽게 추출 가능
  • 단점: 상대적으로 느려 성능이 떨어질 수 있고 key값에 null을 허용하지 않음

LinkedHashMap

  • 장점: 삽입한 순서대로 순서가 보장이 되며 빠른 성능으로 데이터 처리가 가능하다.
  • 단점: 순서까지 유지되기 때문에 더 많은 메모리 사용하며 순서관리비용이 발생할 수 있다.

WeakHashMap

  • 장점: 다른곳에서 참조되지 않으면 가비지컬렉터에 의해 자동으로 제거되기에 메모리 누수 방지 가능하며 메모리를 효율적으로 사용할 수 있다.
  • 단점: 가비지컬랙션이 언제 일어날지 알 수 없기 때문에 예기치 못한 동작이 일어날 수 있으며 가비지컬렉션을 관리하는데 추가적인 오버헤드가 발생 할 수 있다.

여기까지 Collection의 가장 큰 틀인 List, Set, Map의 특징들과 각각이 가지고 있는 클래스들의 장점과 단점에 대해 알아봤으며 이후 하나씩 살펴보며 어떤 상황에서 사용하는 것이 더 유용할지 알아보는 시간을 가져 볼 예정이다.

반응형

'JAVA > OLD' 카테고리의 다른 글

Collection_3_Set  (0) 2025.02.25
Collection_2_List  (0) 2025.02.11
JSTL LOOP(forEach)  (0) 2024.08.19
JSTL_if, choose(조건분기)  (0) 2024.08.19
JSTL_Basic  (0) 2024.08.19

블로그의 정보

AquaMan

핫도구

활동하기