컬렉션프레임워크 (Collection Framework) 의정의 - 다수의데이터를쉽게처리할수있는표준화된방법을제공하는클래스들 - 데이터의집합을다루고표현하기위한단일화된구조 (architecture) - JDK 1.2 이전까지는 Vector, Hashtable, Properties와같은컬렉션클래스로서로다른각자의방식으로처리 - 컬렉션프레임워크는다수의데이터를다루는데필요한다양하고풍부한클래스들을제공하므로프로그래머의부담을상당부분덜어준다.
컬렉션프레임워크 (Collection Framework) 의종류 인터페이스이름 List Set Map 특징순서가있는데이터의집합. 데이터의중복을허용한다. 예 ) 대기자의명단구현클래스 : ArrayList, LinkedList, Stack, Vector 순서를유지하지않는데이터의집합. 데이터의중복을허용하지않는다. 예 ) 양의정수집합, 소수의집합구현클래스 : HashSet, TreeSet 키 (key) 와값 (value) 의쌍 (pair) 으로이루어진데이터의집합순서는유지되지않으며, 키는중복을허용하지않고, 값은중복을허용한다. 예 ) 우편번호, 지역번호 ( 전화번호 ) 구현클래스 : HashMap, TreeMap, Hashtable, Properties
컬렉션프레임워크 (Collection Framework) 의사용 - 실제개발시에다루고자하는데이터의특징을파악하고어떤컬렉션프레임워크를사용해야하는지결정 - 컬렉션프레임워크의모든클래스들은 List, Set, Map 중하나를구현 - List와 Set은 Collection 인터페이스를상속받도록설계됨 - Vector, Hashtable, Properties와같은컬렉션클래스들은컬렉션프레임워크이전부터존재 - Vector나 Hashtable과같은클래스대신 ArrayList나 HashMap 사용
Collection 인터페이스에정의된메서드들 (1/2) 메서드 boolean add(object o) boolean addaa(collection c) 사용예제 지정된객체 (o) 또는 Collection(c) 의객체들을 Collectoin 에추가 void clear() Collection 의모든객체를삭제한다. boolean contains(object o) boolean containsall(collection c) 지정된객체 (o) 또는 Collection(c) 의객체들이 Collection 에포함되어있는지확인한다. boolean equals(object o) 동일한 Collection인지비교한다. int hascode() Collection의 hash code를반환한다. boolean isempty() Collection이비어있는지확인한다. Iterator iterator() Collection의 Iterator를반환한다. boolean remove(object o) 지정된객체를삭제한다. boolean removeall(collection c) 지정된 Collection에포함된객체들을삭제한다. boolean retainall(collection c) 지정된 Collection 에포함된객체만을남기고다른객체들은 Collection 에서삭제한다. 이작업으로인해 Collection 에변화가있으면 true, 변화가없으면 false 를반환한다.
Collection 인터페이스에정의된메서드들 (2/2) 메서드사용예제 int size() Collection에저장된객체의개수를반환한다. Object[] toarray() Collection 에저장된객체를객체배열 (Object []) 로반환 Object[] toarray(object[] a) 지정된배열에 Collection 의객체를저장해서반환한다.
List 인터페이스에정의된메서드들 메서드 void add(int index, Object element) boolean addall(int index, Collection c) 사용예제 지정된위치 (index) 에객체 (element) 또는컬렉션에포함된객체들을추가한다. Object get(int index) 지정된위치 (index) 에있는객체를반환한다. int indexof(object o) int lastindexof(object o) ListIterator listiterator() ListIterator ListIterator(int index) Object remove(int index) 지정된객체의위치 (index) 를반환한다. (List 의첫번째요소부터순방향으로찾는다.) 지정된객체의위치 (index) 를반환한다. (List 의마지막요소부터역방향으로찾는다.) List 의객체에접근할수있는 ListIterator 를반환한다. 지정된위치 (index) 에있는객체를삭제하고삭제된객체를반환한다. Object set(int index, Object element) 지정된위치 (index) 에객체 (element) 를저장한다. List sublist(int fromindex, int toindex) 지정된범위 (fromindex 부터 toindex) 에있는객체를반환한다.
Map 인터페이스에정의된메서드들 (1/2) 메서드 사용예제 void clear() Map 의모든객체를삭제한다. boolean containkey(object key) boolean containsvalue(object value) set entryset() 지정된 key 객체와일치하는 Map 의 key 객체가있는지확인한다. 지정된 value 객체와일치하는 Map 의 value 객체가있는지확인한다. Map 에저장되어있는 key-value 쌍을 Map.Entry 타입의객체로저장한 Set 으로반환한다. boolean equals(object o) 동일한 Map 인지비교한다. Object get(object key) 지정한 key 객체에대응하는 value 객체를찾아서반환 int hashcode() 해시코드를반환한다. boolean isempty() Map이비어있는지확인한다. Set keyset() Map에저장된모든 key객체를반환한다. Object put(object key, Object value) Map에 key-value로연결 (mapping) 하여저장한다.
Map 인터페이스에정의된메서드들 (2/2) 메서드 사용예제 void putall(map t) 지정된 Map의모든 key-value 쌍을추가한다. Object remove(object key) 지정한 key 객체와일치하는 key-value 객체를삭제 int size() Map 에저장된 key-value 쌍의개수를반환한다. Collection values() Map 에저장된모든 value 객체를반환한다.
컬렉션프레임워크의상속관계 (1/2) Collection Map List Set Vector ArrayList LinkedList HashSet SortedSet Stack TreeSet
컬렉션프레임워크의상속관계 (2/2) Map Hashtable HashMap SortedMap LinkedHashMap TreeMap
ArrayList 와 LinkedList 의비교 - 순차적으로추가 / 삭제하는경우에는 ArrayList 가빠르다. - 중간데이터를삭제하는경우에는 LikedList 가빠르다. 컬렉션이름읽기 ( 접근시간 ) 추가 / 삭제비고 ArrayList 빠르다느리다 순차적인추가삭제는빠름. 비효율적인메모리사용 LinkedList 느리다빠르다데이터가많을수록접근성이떨어짐
Stack 클래스의메서드들 메서드 사용예제 boolean empty() Stack 이비어있는지알려준다. Object peek() Stack 의맨위에저장된객체를반환한다. Stack 에서꺼내지는않는다. 비었을때 null 을반환한다. Object pop() Stack 의맨위에저장된객체를꺼낸다. Object push(object item) Stack 에객체 (item) 을저장한다. int search(object o) Stack 에서주어진객체 (o) 를찾아서그위치를반환한다.( 배열과는달리 1 부터시작한다.)
Queue 인터페이스의메서드들 - JAVA 에서큐는 Queue 인터페이스로만정의해놓았다. 메서드 Object element() boolean offer(object o) Object peek() 사용예제 삭제없이저장된요소를읽어온다. peek() 과다른점은큐가비었을때 Exception 을발생시킨다.(peek() 은 null 을반환 ) 큐에객체를저장한다. 성공하면 true, 실패하면 false 를반환 큐에저장된객체를삭제없이읽어온다. 큐가비었으면 null 을반환 Object poll() 큐에서꺼내온다. 비어있으면 null 을반환한다. Object remove() 큐에서꺼내온다. 비어있으면예외를발생시킨다.
TreeSet 의정의 - 이진검색트리 (binary search tree) 의형태로데이터를저장하는컬렉션클래스 - 이진검색트리는정렬, 검색에서뛰어난성능을보이는구조 - Set인터페이스를구현했으므로중복된데이터의저장을허용하지않으며정렬된위치에저장되므로저장순서를유지하지않는다. - 이진트리는링크드리스트로연결되며최대 2개의노드를연결 - 루트 (root) 로불리는하나의노드에서시작해서계속확장된다. - 이진검색트리는왼쪽에는부모노드보다작은값을위치시키고, 오른쪽에는부모노드보다큰값을위치시킨다.
이진검색트리의정의 - 모든노드는최대두개의자식노드를가질수있다. - 왼쪽자식노드의값은부모노드의값보다작다. - 오른쪽자식노드의값은부모노드의값보다크다. - 검색과정렬에유리하다.
이진검색트리의구조 0x100 5 0x200 5 0x200 null 7 null 1 7 0x100 null 1 null
이진검색트리의생성 - 7, 4, 9, 1, 6 의순서로데이터가삽입 7 7 7 7 4 4 9 4 9 7 4 9 1 1 6
Hashtable 과 HashMap - Vector와 ArrayList의관계와같이 Hashtable은구버전이다. - Hashtable보다는 HashMap의사용을권장한다. - HashMap은 Map인터페이스를구현한것으로, Map의특징을갖는다. - Map은키 (key) 와값 (value) 을묶어서하나의데이터로저장한다. - 해싱 (hashing) 을사용하기때문에많은양의데이터검색에매우우수하다.
HashMap - 키와값을각각 Object 형태로저장한다. 즉, (Object, Object) 의형태로저장한다. 키 (key) 컬렉션내의키 (key) 중에서유일한값이어야한다. 값 (value) 키 (key) 와다르게데이터의중복을허용한다. - 키는저장된값을찾는데사용되므로컬렉션내에서유일해야한다. 즉, HashMap 에저장된데이터를하나의키로검색했을때결과가 오직하나이어야한다.