2014년 8월 25일 월요일

컬렉션 프레임워크와 유용한 클래스

컬렉션 프레임워크란?

: 데이터 군을 저장하는 클래스들을 표준화한 설계


컬렉션 프레임워크의 종류?


  1. Collection
  • List : 순서가 있는 데이터 집합. 값의 중복을 허용.(ArrayList, LinkedList, Stack, Vector)
  • Set : 순서가 없는 데이터 집합. 값의 중복을 불허.(HashSet, TreeSet)

  1. Map : prameter(key, value). 키의 중복을 불허. 값의 중복을 허용.(HashMap, TreeMap, HashTable, Properties)

동기화(Synchronize)를 사용하는 이유?

: Multi-Thread로 프로그램을 구현한 경우, 하나의 객체를 다수의 Thread가 접근하여 실행될 때마다 값이 변화할 수 있다.
(여기서는 컬렉션을 사용할 때 동기화가 필요하다는 정도만 인지하도록 하자.)

List : Vector와 ArrayList

  • 공통점
1. 저장 순서가 유지 : 값을 다시 따로 설정하지 않는 이상, 값이 들어온대로 순서가 매겨진다.
2. 값의 중복을 허용 : (int)10의 값을 이전에 입력받아도 이후, (int)10의 값을 받아도 문제가 없다.
3. 배열 사용 : Vector v[] = { ... }, ArrayList arrlist[] = { ... }의 형태

  •  차이점 
1. Vector는 동기화가 되어있다.(callback synchronized) / ArrayList는 동기화를 필요로 한다.

List : LinkedList

: 크기를 변형할 수 없으며, 비순차적인 데이터 추가가 가능하다.
: 이후 유지 관리가 힘들다.

  • LinkedList 구조 : 2차원 배열
Node(previous_reference, value) - Node(previous_reference, value) - ....

  • 유지 관리가 힘든 이유?
LinkedList는 고정 배열로 미리 노드가 만들어질 공간을 확보한 뒤 그곳에 Data를 I/O하기 때문.


List : Stack 그리고 Queue

: 코드 설명으로 대체
: \JAVA_Standard\src\frameworkEx\StackEx.java
: \JAVA_Standard\src\frameworkEx\StackEx01.java

List : 열거형 인터페이스(Enumeration, Iterator, ListIterator)

  • Iterator
: 컬렉션에 저장된 요소에 단방향으로 접근(순차적 접근)
: Iterator.next()로 값을 읽어온다.

  • Enumeration
: Iterator의 구버전 인터페이스
: Enumeration은 Snap-Shot기능을 지원한다.
: Iterator는 순차적 접근이 실패한 경우 CollectionModificationException이 callback된다.
: Enumeration은 순차적 접근이 실패해도 끝까지 진행한다.

  • ListIterator
: 컬렉션에 저장된 요소에 양방향으로 접근이 가능(previous(), next() 메소드가 존재.)

예제 
: /JAVA_Standard/src/frameworkEx/ListIteratorEx.java
: /JAVA_Standard/src/frameworkEx/LinkedListEx.java

Set : HashSet

: 순서도 없고 중복을 허용하지 않는다.(순차적으로 진행하는 것을 원한다면 LinkedHashSet을 사용하도록 한다.)
: ->위의 특징을 이용하여 중복되는 값을 제거할 수 있다.

예제
: /JAVA_Standard/src/frameworkEx/HashSetEx.java
: p.480(p.314)

Set : TreeSet 

: 이진검색트리(binary search tree : b-tree) 컬렉션 클래스
: TreeNode(left_child_reference, value, right_child_reference)
: parent_node_value > left_child_value && parent_node_value < right_child_value
: 검색과 정렬이 용이하다.

Set : 검색 인터페이스(Comparator, Comparable)

: 이런것이 있다정도만 알고 지나갑시다.

Map : HashMap, HashTable

: Hashing = "많은 양의 data를 그보다 작은 크기의 table로 mapping시켜서 저장하는 방식"
: parameter(key, value) = 내부에서 Entry[] LinkedList구조로 이루어져있다.(p.495)
: HashMap은 null값을 허용, HashTable은 null값을 불허

Map : TreeMap

: 이진검색트리 형태 컬렉션 클래스
: TreeNode(left_child_reference, key, value, right_child_reference)

※컬렉션 클래스 정리 & 요약 : p.514
※StringTokenizer도 한번 보는 것으로  

댓글 없음:

댓글 쓰기