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 |