List,Set,Map의 Class중 어떤것을 쓸것인지 판단할수 있도록 표로 정리해 보았다.
용어 | List : 중복을 허용하고, index를 통한 접근을 한다. index가 부족하게 되면 메모리를 새로 할당하여 복사하여 구성하게 된다. Set : 집합(수학), 집합은 중복을 허용하지 않고 교집합/합집합/차집합등을 지원한다.(And(교집합), OR(합집합), XOR (Not Or)등을 지원함) |
|||||||||||
Hash : Hash Function을 말하며 고유한 Key값(Unique Key)을 주면 고유한 값을 Return한다(중복안됨). Hash연산은 다방면으로 사용되어지고 있다. | ||||||||||||
Linked : Array의 전/후의 값이 서로 Link[양방향연결고리]되어 있어 계속늘어날 수 있으나, 중간검색이 되지 않아 검색속도가 느리다. 수정/추가/삭제가 빠르다 | ||||||||||||
Tree : Hash Function은 고유값을 주기때문에 정렬이 되지 않는다. 이를 개선한 Balance Tree로 정렬된 방식( Oracle-Index와 유사하다) Tree안에 들어가는 Object는 [Comparable Interface]를 [Implement]한 Object여만 한다. (왜? 자동정렬하려면 기존값과 입력되는 값이 비교해야 하므로..ㅋㅋ) |
||||||||||||
int a[3] = { 0, 1, 2, 3, 4 } | ||||||||||||
사용시점 | C의 Array처럼 특정변수를 나열해서 사용하고자 할 때 사용한다. | |||||||||||
예제 | 소수의 집합 int a[5] = { 1 , 2 , 3, 5 , 7, 13 } | |||||||||||
1차원 Array | Legacy | 이름 | 구분 | 사용시점 | ||||||||
The Enumeration | Interface | BitSet, Vector , Stack에서 Method [ hasMoreElements, nextElement]를 사용하고자 할 때 | ||||||||||
BitSet | Class | 중복허용(X) Array A와 Array B를 Bit연산(And , OR, XOR,etc )을 수행하여 결과를 보고자 할 때 |
||||||||||
Vector | Class | 중복허용(O) / [ArrayList]와 유사하다. Array의 들어가는 대상이 동적이며, Index접근하고자 할 때 ArraryList보다 속도가 느리고, Multi Thread 에 대해서 좀더 안전하다 |
||||||||||
Stack | SubClass of Vector | 중복허용(O) Array의 들어가는 대상이 동적이며, LIFO방식으로 접근하고자 할 때 |
||||||||||
Collection Framework |
The Collection | Interface | [Set][List]의 최상위 Interface | |||||||||
HashSet | Class | 중복허용(X), 정렬(X) Hash function을 수행하여 관리한다. |
||||||||||
LinkedHashSet | SubClass of HashSet | 중복허용(X), 정렬(X), HashSet대비(수정/삽입빠름, 검색느림) Hash function을 수행하여 관리한다. |
||||||||||
TreeSet | Class | 중복허용(X), 정렬(O) , 기본Ascending, 대량의 데이터 검색시 매우빠름 |
||||||||||
LinkedList | Class | 중복허용(O), 정렬(X), ArrayList대비(수정/삽입/삭제 빠름, 검색느림) |
||||||||||
ArrayList | Class | 중복허용(O), 정렬(X) , C의 Array의 Java 확장판임. |
||||||||||
int a[3][1] = {"key1", 10 } , { "key2", 20 } , { "key3" , 30 } , { "key4, 40 } , { "key5", 50 } | ||||||||||||
사용시점 | C의 Array를 2차원으로 선언하여 앞에값은 [Key]값을 뒤에 해당 Key가 물고있는 Value로 사용하고자 할 때 사용한다. | |||||||||||
예제 | 주민번호/이름 = { "xxxxxx" , "홍길동" } , { "zzzzzz", "이순신" } , { "xxxxx", "유관순" } | |||||||||||
2차원 Array | Legacy | 이름 | 구분 | 사용시점 | ||||||||
The Dictionary | abstract class | [Map Interface]로 대체되었음 | ||||||||||
The Hashtable | Class | {"Key1", 숫자} , {"Key1", 10 } , {"Key2", 20 } /Value가 숫자형일때 / Key가 중복금지 | ||||||||||
The Properties | SubClass of Hashtable | {"Key1", "문자열"} , {"Key1", "aaa" } , {"Key2", "bbb" } /Value가 문자열일때 / Key중복금지 | ||||||||||
Collection Framework |
HashMap | Class | Key중복허용(X), Key정렬(X) Hash function을 수행하여 관리한다. |
|||||||||
LinkedHashMap | SubClass of HashMap | Key중복허용(X), Key정렬(X), HashMap대비(수정/삽입빠름, 검색느림) Hash function을 수행하여 관리한다. |
||||||||||
TreeMap | Class | Key중복허용(X), Key정렬(O) , 기본Ascending, 대량의 데이터 검색시 매우빠름 | ||||||||||
WeakHashMap | Class | Key중복허용(X), Key정렬(X) HashMap에 메모리관 관리부분 효율성을 확보한다.. ( 참조가 약한 값들을 Garbage collector가 자동으로 지울수 있도록함 ) =>메모리 효율이 올라가나 예상치 못한 데이터상의 오류가 발생할 여지가 있다. |
||||||||||
IdentityHashMap | Class | Key중복허용(X), Key정렬(X) 참조변수(Reference Valiable)를 통한 값의 비교시 사용되는 극히 드문경우에 사용되는 Map이다. |
Java Collection Framework (JCF)
: Java에서 데이터를 저장하는 기본적인 자료구조들을 한 곳에 모아 관리하고 편하게 사용하기 위해서 제공하는 것을 의미한다. 다음은 JCF의 상속 구조이며 사용 용도에 따라 List, Set, Map 3가지로 요약할 수 있다.
■ 각 인터페이스의 특징
인터페이스 | 구현 클래스 | 특징 |
List | LinkedList Stack Vector ArrayList |
순서가 있는 데이터의 집합, 데이터의 중복을 허용한다. |
Set | HashSet TreeSet |
순서를 유지하지 않는 데이터의 집합, 데이터의 중복을 허용하지 않는다. |
Map | HashMap TreeMap HashTable Properties |
키(key)와 값(value)의 쌍으로 이루어진 데이터의 집합이다. 순서는 유지되지 않고, 키는 중복을 허용하지 않으며 값의 중복을 허용한다. |
■ Collection Interface
: 모든 콜렉션의 상위 인터페이스로써 콜렉션들이 갖고 있는 핵심 메소드를 선언 (add, contain, isEmpty, remove, size, iterator ...)
: Collection 인터페이스를 확장한 자료형으로 요소들의 순서를 저장하여 색인(Index)를 사용하여 특정 위치에 요소를 삽입하거나 접근할 수 있으며 중복 요소 허용
: 집합을 정의하며 요소의 중복을 허용하지 않음. 상위 메소드만 사용함
■ Map Interface
: Key와 Value의 쌍으로 연관지어 저장하는 객체
■ 각 클래스의 메소드 링크
출처: https://codediver.tistory.com/49 [코드 다이버]
'자료구조 ' 카테고리의 다른 글
JAVA Map 키(Key) 값(Value) 정렬 방법과 자동 정렬 예제 (0) | 2022.02.17 |
---|---|
Collection이란? (0) | 2022.01.29 |
HashMap (0) | 2022.01.27 |
스택이란 (0) | 2022.01.24 |