정리하는 습관을 들이자
java 의 Collections 본문
Collection이란?
오브젝트 집합을 나타내는 가장 기본적인 인터페이스
Java Collection Framework (JCF)
배열의 단점 ( 배열은 처음 크기를 지정하면 변경이 불가능하다 )을 보완한 데이터 군을 저장하는 클래스들의 표준화한 설계
(동적으로 메로리 관리 가능)
java에서 데이터를 저장하는 기본적인 자료구조로 사용용도에 따라 List, Set, Map 3가지료 요약할 수 있다.
[ JCF(Java Collection Framework)의 상속구조 그림 ]
각각의 인터페이스 특징
인터페이스 | 구현클래스 | 특징 |
List | LinkedList Stack Vector ArrayList | 순서가 있는 데이터의 집합 데이터의 중복을 허용한다. 각요소마다 인덱스가 존재. 인덱스로 직접 접근가능 |
Set | HashSet TreeSet | 순서를 유지하지 않는 데이터의 집합 데이터의 중복을 허용하지 않는다. |
Map | HashMap TreeMap HashTable SortedMap | 키(key)와 값(value)의 쌍으로 이루어진 데이터의 집합 순서는 유지되지 않음 키는 중복을 허용하지 않으며 값의 중복을 허용 |
※ Sorted : Set과 Map 인터페이스를 상속받아 정렬기능 이 추가되된 SortedSet과 SortedMap 인터페이스가 있다. 각각 TreeSet, TreeMap 클래스로 구성되며 각각은 Set과 Map의 기능을 가지고 있으면서 정렬 기능이 가미되어 있는것이 특징.
List Interface
ArrayList
상당히 빠르고 크기를 마음대로 조절할 수 있는 배열 (동적으로 메모리 증가 기능을 구현한 클래스)
단방향 포인터 구조로 자료에 대한 순차적인 접근에 강점
동기화를 보장하지 않음 ( 동기화 방법 : List list = Collections.synchronizeList(new ArrayList(…) )
LinkedList
양방향 포인터 구조로 데이터의 삽입, 삭제가 빈번할 경우 빠른 성능 보장
스택,큐,양방향 큐 등을 만들기 위한 용도로 사용
Vector
모든메소드가 동기화 되어있음
ArrayList의 구형버전으로 최근에 잘 사용하지 않음.
Set Interface
HashSet
가장 빠른 임의 접근 속도
속도를 전혀 예측할수 없음
Iterator 를 사용하여 Data추출 가능 (Iterator : Collection 내의 모든 Data에 접근 가능한 특징이 있다. )
LinkedHashSet
추가된 순서로 접근 가능
TreeSet
이진탐색트리 자료구조 형태로 데이터를 저장
저장되는 시점에 정렬된 위치에 저장됨
Map Interface : List와 Set이 순서나 집합적인 개념의 인터페이스 라면 Map은 검색의 개념이 가미된 인터페이스 (key값을 통해 value를 얻을수 있음.)
HashMap
키와 값으로 null이 허용됨
동기화가 보장되지 않음 ( 동기화 : Map m = Collections.synchronizedMap(New HashMap(…)); )
HashTable
키와 값으로 null이 허용되지 않음
HashMap 보다는 느리지만 동기화가 보장됨
LinkedHashMap
기본적으로 HashMap 을 상속받아 HashMap과 매우 흡사
Map에 있는 엔트리들의 연결 리스트가 유지되므로 입력한 순서대로 반복 가능
TreeMap
SortedMap을 구현하였으므로 key값들에 의해 정렬됨
참조
- http://hackersstudy.tistory.com/26