본문 바로가기

Java

Collection FrameWork

Collection FrameWork

collection framework 

자바는 자료구조를 바탕으로 java.util 패키지에 인터페이스와 클래스를 포함

framework : 사용법을 정해놓은 라이브러리

참고 : 이것이 자바다 

 

1. List

index가 존재, 중복 값 존재

add, set, contains, get, isEmpty, size, remove, clear와 같은 매소드들의 정의 되어 있음

 

- ArraysList

길이가 가변적 (설정한 capacity를 넘어서면 배열 크기 1.5배 증가, default capacity 10)

배열의 구조이기 때문에 삽입/삭제에 시간이 걸림. (검색/마지막에 삽입에 유리)

List<E> list = new ArrayList<E>();

 

- Vector

ArraysList와 같은 구조

synchronized를 사용함으로써 Thread-safe

List<E> list = new Vector<E>();

 

- LinkedList

체인처럼 관리, 현재 노드가 다음 노드의 주소를 가지고 있음

삽입/삭제에 유리

List<E> list = new LinkedList<E>();

 

2. Set

index가 존재X, 중복 값 존재X

add, iterator, contains, get, isEmpty, size, remove, clear와 같은 매소드들의 정의 되어 있음

(List와 다르게 인덱스가 없기 때문에 set이 없고 iterator가 존재)

 

- HashSet

중복체크 : 객체의 hashCode와 equals()를 사용하여 중복 검사(동일한 hashcode일 경우, equals())

Set<E> set = new HashSet<E>();

 

- TresSet

이진트리 구조를 가지며, (default 오름차순)

검색의 빠름(이진탐색 가능, 시간복잡도 logN 보장)

Set<E> set = new TreeSet<E>();

 

3. Map

<key,value> 형태

 

- HashMap

중복체크 : 객체의 hashCode와 equals()를 사용하여 중복 검사(동일한 hashcode일 경우, equals())

Map<K,V> map = new HashMap<K,V>();

 

- HashTable

HashMap과 동일한 구조

synchronized를 사용함으로써 Thread-safe

Map<K,V> map = new Hashtable<K,V>();

 

- properties

hasntable의 하위구조, K,V가 <String, String>으로 고정

~.properties 를 conf 파일에 많이 사용됨

ex)

Properties prop = new Properties();

String path = 클래스이름.class.getResourse("test.properties").getPath();

prop.load(new FileReader(path));

String test = prop.getProperty("test"); //test=hello world

 

- TreeMap

이진트리 구조를 가지며, (default 오름차순)

검색의 빠름(이진탐색 가능, 시간복잡도 logN 보장)

Map<K, V> map = new TreeMap<K, V>();

 

4. TreeSet, TreeMap

compareTo()에 의해 정렬되기 때문에 사용자 클래스를 인자로 사용하기 위해서는 

Comparable, Comparator를 implement하여 override 해줘야 한다.

 

5. 동기화된 컬렉션

- syncronizedList, syncronizedMap, syncronizedSet을 사용하여 동기화 컬렉션으로 사용 가능하도록 한다.

ex)

List<T> list = Collections.synchronizedList(new ArraysList<T>());

 

6. 병렬처리를 위한 컬렉션

- 동기화를 해버릴시에 멀티 스레드가 병렬적으로 처리 할 수 없다.

ConcurrentHashMap<K,V>(), ConcurrentLinkedQueue<E>()를 사용하여 부분적 잠금을 사용할 수 있다.

ex)

Map<K,V> map = new ConcurrentHashMap<K, V>();

'Java' 카테고리의 다른 글

GC(garbage collector)  (0) 2022.07.20
Stream API  (0) 2022.02.09