java collection framework

jik·2023년 8월 4일
0
post-thumbnail

안녕하세요.

java collection framework를 자주 사용하는데 어느순간 ??? 하고 갑자기 안떠오를때가 있습니다.
개발하다 특별한일이 없으면 ArrayList만으로도 충분히 처리가 가능한 경우가 많다보니 그런것 같습니다.
기본적이면서 필수, 그런데 깜빡깜빡하는 자바의 콜렉션 클래스집합들에 대해 간략히 정리해보았습니다.

ArrayList

arraylist는 사이즈 변경이 가능한 배열 구현체입니다. 특정 순서 접근이 필요없고 많은 수의 데이터를 저장해야할 때 선택할 수 있습니다.
예를 들어 판매자의 상품목록을 모두 가져와 순차 처리를 할때 사용할 수 있습니다.

LinkedList

LinkedList는 노드가 데이터를 갖고 이전 노드와 다음노드 주소 값 2개를 갖고 있는 doubly-linked list입니다. 각 node는 데이터와 포인터를 갖고 한 줄로 연결되어 LinkedList라고 부릅니다.
ArrayList 처럼 인덱스로 요소에 접근하지만 배열이 아니기 때문에 특정 요소에 대해 접근시 성능이 좋지 않습니다.
대신 데이터의 중간 삽입, 삭제가 빈번할 경우 빠른 성능을 보장하며 큐 (offer, poll)를 구현할때 사용합니다.

Vector

확장 가능한 배열 구현체입니다. ArrayList와 비슷하지만 항상 동기화가 되므로 (thread-safe) 이기 때문에 여러 스레드에서 동시에 접근하는 경우 선택할 수 있지만 항상 동기화가 되기 때문에 ArrayList보다는 성능이 느립니다.

Stack

LIFO (후입선출) 자료구조입니다. 목록중 가장 최근에 추가된 아이템에 접근하고자 할때 사용 합니다.

Queue

FIFO (선입선출) 데이터구조입니다. 아이템이 생성되고 순서대로 처리를 하고자 할때 사용 합니다.

HashTable & HashMap

(Key/Value)로 데이터를 저장하는 자료구조입니다.
Key값에 해시함수를 사용해 배열에 고유 index를 생성하며 이것으로 값을 저장하거나 검색합니다.
HashMap은 thread-safe하지 않으며 null을 허용합니다. 보조해시함수를 사용하기 때문에 hash collision 발생 확률이 낮습니다.
hashtable은 collection framework이 생기기 이전에 만들어졌고 이후에 hashMap 클래스가 구현되었습니다. 주어진 키 값을 이용해 빠르게 탐색을 해야하는 경우 hashMap을 사용 합니다.

TreeMap

SortedMap 구현체입니다. 숫자는 값, 문자는 유니코드로 오름차순 정렬이 일어납니다. 정렬된 상태로 데이터를 조회하는 경우 사용합니다.

Set

Set은 중복 아이템을 허용하지 않는 컬렉션입니다. 고유한 아이템만 보관/처리하는 경우에 사용합니다.

SortedSet

SortedSet은 Set과 같지만 아이템을 정렬된 순서로(Comparable/Comparator interface) 유지 관리할 수 있습니다.

HashSet

HashMap에 아이템을 저장하는 Set 인터페이스의 구현체입니다. 중복X, nullable의 특성을 갖고 있습니다. 순서와 상관없이 접근하고 고유한 아이템을 처리하고자 할 때 사용합니다.

TreeSet

SortedSet 인터페이스 구현체. 오름차순으로 순서가 보장됩니다. (creation time으로도 가능)
(add, remove, contains) operation에 대해 시간복잡도 log(n)을 보장 합니다.
TreeSet은 정렬된 순서로 저장하고 고유한 아이템을 찾아 처리하는 경우에 적합합니다.

LinkedHashSet

아이템들을 doubly-linked list에 저장하는 Set 인터페이스의 구현체입니다. HashSet에서 순서를 보장하며 처리해야 할 때 사용합니다.

1개의 댓글

comment-user-thumbnail
2023년 8월 4일

좋은 글이네요. 공유해주셔서 감사합니다.

답글 달기