■ Collection : 오브젝트 집합을 나타내는 가장 기본적인 인터페이스
□ Set : 중복 요소 없는 오브젝트 집합
○ SortedSet : 요소가 자동 올림순으로 정렬된다.
삽입되는 요소는 Comparable 인터페이스 속성을 갖고 있지만
지정된 Comparator에 의해 받아들여진다.
□ List : 순서있는 오브젝트 집합, 중복허가, 리스트내의 특정위치에 요소를 넣을 수 있다.
유저는 위치(인덱스)를 지정하여 각요소에 접근할 수 있다.
■ Map : 키-값으로 나타내는 오브젝트 집합. 키는 중복될 수 없다.
□ SortedMap : 요소가 키로서 자동 올림순 정렬되는 Map.
삽입된 키는 Comparable 인터페이스 속성을 갖고 있지만
지정된 Comparator에 의해 받아들여진다.
|
HashSet : HashMap 인터페이스를 기본으로 Set인터페이스를 구현한 것. 순서를 보장할 수 없다.
TreeSet : TreeMap 인터페이스를 기본으로 Set인터페이스를 구현한 것. 올림순으로 소트된다.
LinkedHashSet : 삽입된 순서를 기억한다.
같은 요소를 다시 삽입하면 이전 순서를 그대로 기억한다.
ArrayList : List 인터페이스 속성을 갖고 배열크기를 변경할 수 있다.
배열크기를 조작하는 메소드를 제공한다.
LinkedList : 리스트의 처음과 마지막 요소를 삽입,삭제할 수 있다.
그 관련 메소드 제공.
동기화되어 있지 않다는 것을 제외하면 Vector와 같다.
HashMap : 동기화되어 있지않다는 것과 Null을 허용한다는 것 이외에는 HashTable과 같다.
TreeMap : Red-Black Tree. 키의 올림순으로 소트된다.
LinkedHashMap : 키가 맵에 삽입된 순서를 기억한다.
같은 키로 삽입해도 이전의 순서를 기억한다.
■HashSet,TreeSet,LinkedHashSet 비교
중복요소없는 오브젝트 집합을 관리하는 클래스에는 HashSet,TreeSet,LinkedHashSet가 있다.
Set기능만 필요한 경우에는 HashSet.
요소를 올림차순으로 정렬하는 경우에는 TreeSet.
요소의 삽입순서를 기억할 필요가 있을 때에는 LinkedHashSet.
■ArrayList와 LinkedList
순서있는 오브젝트 집합을 관리하는 클래스로는 ArrayList와 LinkedList가 있다.
|
ArrayList는 인덱스에 의한 랜덤엑세스 성능이 좋지만
요소의 삽입, 삭제에는 좋지않다.
LinkedList는 거꾸로 요소의 삽입, 삭제에는 성능이 좋지만
인덱스에 의한 랜덤엑세스는 좋지 않다.
■HashMap, TreeMap, LinkedHashMap
키-값 관계로 맵핑하는 경우에 사용하는 클래스에는 HashMap, TreeMap, LinkedHashMap이 있다.
Map 기능만 필요한 경우는 HashMap
키를 올림차순으로 소트할 필요가 있을 때는 TreeMap
키의 삽입순서를 기억할 필요가 있을 때에는 LinkedHashMap
■Set Class Test
import java.util.*;
public class SetClassTest {
public static void main(String[] args) {
try {
// HashSet
Set hashSet = new HashSet();
addData(hashSet);
System.out.println("HashSet : " + hashSet);
// TreeSet
Set treeSet = new TreeSet();
addData(treeSet);
System.out.println("TreeSet : " + treeSet);
// LinkedHashSet
Set linkedHashSet = new LinkedHashSet();
addData(linkedHashSet);
System.out.println("LinkedHashSet : " + linkedHashSet);
} catch (Exception e) {
e.printStackTrace();
}
}
static void addData(Set set) {
for (int i = 10;i >= 1;i--) {
set.add(new Integer(i));
}
}
}
결과 :
HashSet : [2,4,8,9,6,1,3,7,10,5]
TreeSet : [1,2,3,4,5,6,7,8,9,10]
LinkedHashSet : [10,9,8,7,6,5,4,3,2,1]
■List Class Test
import java.util.*;
public class ListClassTest {
public static void main(String[] args) {
try {
long start, end;
/** 추가 **/
// ArrayList
List arrayList = new ArrayList();
start = System.currentTimeMillis();
addData(arrayList);
end = System.currentTimeMillis();
System.out.println("ArrayList 추가 : " + (end - start));
// LinkedList
List linkedList = new LinkedList();
start = System.currentTimeMillis();
addData(linkedList);
end = System.currentTimeMillis();
System.out.println("LinkedList 추가 : " + (end - start));
/** 삭제 **/
// ArrayList
start = System.currentTimeMillis();
removeData(arrayList);
end = System.currentTimeMillis();
System.out.println("ArrayList 삭제 : " + (end - start));
// LinkedList
start = System.currentTimeMillis();
removeData(linkedList);
end = System.currentTimeMillis();
System.out.println("LinkedList 삭제 : " + (end - start));
/** 삽입 **/
// ArrayList
start = System.currentTimeMillis();
insertData(arrayList);
end = System.currentTimeMillis();
System.out.println("ArrayList 삽입 : " + (end - start));
// LinkedList
start = System.currentTimeMillis();
insertData(linkedList);
end = System.currentTimeMillis();
System.out.println("LinkedList 삽입 : " + (end - start));
/** 인덱스 접근 **/
// ArrayList
start = System.currentTimeMillis();
indexAccess(arrayList);
end = System.currentTimeMillis();
System.out.println("ArrayList 인덱스 접근 : " + (end - start));
// LinkedList
start = System.currentTimeMillis();
indexAccess(linkedList);
end = System.currentTimeMillis();
System.out.println("LinkedList 인덱스 접근 : " + (end - start));
/** Iterator 로 접근 **/
// ArrayList
start = System.currentTimeMillis();
iteratorAccess(arrayList);
end = System.currentTimeMillis();
System.out.println("ArrayList Iterator로 접근 : " + (end - start));
// LinkedList
start = System.currentTimeMillis();
iteratorAccess(linkedList);
end = System.currentTimeMillis();
System.out.println("LinkedList Iterator로 접근 : " + (end - start));
} catch (Exception e) {
e.printStackTrace();
}
}
static void addData(List list) {
for (int i=1;i<100000;i++) {
list.add(new Integer(i));
}
}
static void removeData(List list) {
while(!list.isEmpty()) {
list.remove(0);
}
}
static void insertData(List list) {
for (int i=1;i<100000;i++) {
list.add(0 , new Integer(i));
}
}
static void indexAccess(List list) {
int size = list.size();
for (int i=0;i<size;i++) {
Integer integer = (Integer)list.get(i);
}
}
static void iteratorAccess(List list) {
Iterator iterator = list.iterator();
while (iterator.hasNext()) {
Integer integer = (Integer)iterator.next();
}
}
}
결과 :
ArrayList 추가 : 451
LinkedList 추가 : 230
ArrayList 삭제 : 45315
LinkedList 삭제 : 20
ArrayList 삽입 : 45416
LinkedList 삽입 : 170
ArrayList 인덱스로 접근 : 0
LinkedList 인덱스로 접근 : 231473
ArrayList Iterator로 접근 : 60
LinkedList Iterator로 접근 : 50
■Map Class Test
import java.util.*;
public class MapClassTest {
public static void main(String[] args) {
try {
// HashMap
Map hashMap = new HashMap();
putData(hashMap);
System.out.println("HashMap : " + hashMap);
// TreeMap
Map treeMap = new TreeMap();
putData(treeMap);
System.out.println("TreeMap : " + treeMap);
// LinkedHashMap
Map linkedHashMap = new LinkedHashMap();
putData(linkedHashMap);
System.out.println("LinkedHashMap : " + linkedHashMap);
} catch (Exception e) {
e.printStackTrace();
}
}
static void putData(Map map) {
map.put("5" , "Five");
map.put("4" , "Four");
map.put("3" , "Three");
map.put("2" , "Two");
map.put("1" , "One");
}
}
결과 :
HashMap : {3=Three, 5=Five, 2=Two, 4=Four, 1=One}
TreeMap : {1=One, 2=Two, 3=Three, 4=Four, 5=Five}
LinkedHashMap : {5=Five, 4=Four, 3=Three, 2=Two, 1=One}
출처 : http://dojeun.egloos.com
'Java' 카테고리의 다른 글
ArrayIndexOutOfBoundsException (0) | 2011.07.13 |
---|---|
우선순위 큐(Priority Queue)와 힙(Heap) (0) | 2011.05.02 |