본문 바로가기

자료구조

List, Map, Set 사용 하는 법

 

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