Collection 종류 및 내용 정리
Posted 2015. 4. 12. 19:19인터페이스 : Collection, List, Set, Map
구현클래스
Set에 속하는 것들 : HashSet, TreeSet
List에 속하는 것들 : ArrayList, LinkedList
Map에 속하는 것들 : HashMap, TreeMap
Java Collection도 Iterator가 있지만 기능은 몇가지 없다.
hasNext() : 다음 값이 있는지?
next() : 다음 데이터값 리턴
remove() : 원소 삭제
get(i) : index번째 원소 가져옴, Map에서는 key값으로 data찾아옴
set(i, data) : i번째 데이터를 data로 변경
동기화 컬렉션
동기화 안됨 : ArrayList, HashMap
동기화 됨!! : Connection.synchronizedCollection(), Collections.synchronizedList(), ...Set(),.....Map을 사용 또는
ArrayList, HashMap을 래핑하면 됨.
1 Vector : 얘두 배열, 근데 얘는 쓰레드 동기화가 된다.옛날 1.2버전? 이다.
Vector<ClassType> dataName = new Vector<ClassType>();
dataName.add(dasdas);
1-1. ArrayList : Vector 개선판이다. 쓰레드 동기화 안됨.하지만 동기화 컬렉션을 사용하면됨.
가변크기를 제공한다. 가변크기 제공해도 늘어나고 변경되면 메모리 복사땜에 느리긴하지.
set으로 해당 데이터를 교체 할 수도 있고, iter.set(4,data); 4index를 data로 교체
remove로 삭제 remove(i);
기본적인 add, get 가능하고. 근데 get이 index를 넘겨야 하니. 클래스의 특정 값을 비교 후 가져와야 할땐 결국 첨부터 돌아야 된다.
그럴 빠엔 그냥 map 쓰고 key 값으로 특정 클래스의 멤버값을 넣고
data로 클래스를 박아버리는게 훨 낫겟다.
2. LinkedList : C++ list다. get으로 데이터 가져 올 수 있고, add로 맨 끝에 추가한다.
iterator로 원소 검색 도 가능하지. remove(index), size(), add(data), get(index)
while( iter.hasNext() ) 이거로 데이터 끝까지 갈 수 있다.
3. Map : C++의 맵이다. 키 중복은 되지만 값 중복은 불가능하다.
HashMap : 해쉬테이블 개선판이다. 대량 데이터 처리 좋다. 저장 순서가 없다. 키와 값이 대응된다.
if( isEmpty() ), if( map.containsKey(Objct key) ) 처럼 쓸수도 있다.
데이터 저장 순서는 없지만, 내부 정렬은 하고 있다.
4. Set. 중복된 원소가 없는 컬렉션. 순서도 보장 안됨.
처음 3번째 있던놈이 다음에 돌면 어디 있을지 모름.
두개의 set을 합치는 연산, 또는 차이점 이런거 할때처럼
대량 연산을 할때 조으다. set.AddAll( set2 ) 합치던지.
HashSet : HashMap을 이용하여 구현됬다. 중복 요소 추가시 false 반환한다.
TreeSet : TreeMap을 이용하여 구현됬다. 레드-블랙 트리로 되있다.
5. SortedSet. 위에 set과 다른점은 순서가 정해져 있다.
Hash가 붙은것은 해싱(hasing). 해시함수를 이용해서 데이터를 해시테이블에 저장하고 검색하는 기법이다. 해시함수는 데이터가 저장되어 있는 곳을 알려주기때문에 다량의 데이터 중에서 원하는 데이터를 빠르게 찾을 수 있다.
Tree가 붙은건 Tree 이진 검색 트리가 적용 되 있는 것이다.
마찬가지로 검색이 빠르다.
둘 차이는. 해시테이블이 저장 및 가져오는 면에서 더 빠르다.( n(1) 의 상수시간 알고리즘 ) 하지만
그 외의 용도로는 제약이 많다.
이진 검색 트리는 O( log(n) )으로 해시테이블에 비하면 느리지만. 자료가 정렬된 순서 그래도 유지된다.
해시 테이블은 정렬이 필요한 곳에서는 메모리를 정렬만큼 잡아 먹게 된다. 모바일에서 힘들어짐.
요즘은 동기화가 필요 할 때에, Collection.synchronizedCollection( Collection C )를 이용 하는게 성능상 더 좋다고 합니다. ☆
ArrayList, HashMap, TreeMap, HashSet 을 가장 많이 쓴다네. ArrayList가 압도적이긴하지만.
'Java !!!' 카테고리의 다른 글
Generic_1 (0) | 2015.04.14 |
---|---|
Wrapper_Ex3 (0) | 2015.04.10 |
Wrapper_Ex2 (0) | 2015.04.10 |
WrapperClass (0) | 2015.04.10 |
String (0) | 2015.04.10 |
- Filed under : Java !!!