728x90
Collection Framework란?
객체, 데이터들을 효율적으로 관리 할 수 있는 자료구조들을 모아 놓은 라이브러리를 Collection Framework라고 한다. Collection Framework는 사용자에게 데이터 구조를 구현하는데 필요한 다양한 컬렉션 클래스를 제공한다.
아래 그림을 살펴보자.
- List와 Set인터페이스 모두 Collection 인터페이스를 상속받지만, <Key, Value>구조를 갖는Map 인터페이스는 구조상의 차이로 별도로 정의된다.
- List, Set, Map 인터페이스는 ArrayList, HashSet, HashMap과 같은 하위 클래스에 의해 구현된다.
Collection Framework를 구성하고 있는 주요 인터페이스의 간략한 특징은 다음과 같다.
인터페이스 | 설명 | 구현 클래스 |
List<E> | 순서가 있는 데이터의 집합(중복 허용) | LinkedList, Stack, Queue, Vector, ArrayList |
Set<E> | 순서가 없는 데이터의 집합(중복 허용x) | HashSet, TreeSet |
Map<K, V> | <Key,Value>데이터의 집합(Key중복 허용x) | HashMap, Hashtable, TreeMap |
Collection은 제네릭 기법으로 만들어졌기 때문에 보다시피 인터페이스에서 <E>, <K, V>와 같은 타입 매개변수를 사용한다. (어떤 타입이든지 가능하다)
각 인터페이스에 대해서 대표적인 클래스는 어떤 것이 있는 지 대략적으로 살펴보자.
😊List
순서가 있는 데이터의 집합(중복 허용)
1. ArrayList
- 배열을 이용하여 만든 리스트
- 인덱스로 조회가 가능하므로, 인덱스만 알면 빠른 탐색이 가능하다.
- 반면 삽입과 삭제 시 나머지 노드의 위치를 조정을 해야 하기 때문에 LinkedList보다 다소 느리다.
public class ArrayListTest {
public static void main(String[] args){
ArrayList<String> colors = new ArrayList<>(Arrays.asList("black","white"));
//add
colors.add("pink");
//for-loop print
for(String color: colors){
System.out.println(color); //[black white pink]
}
}
}
2. LinkedList
- 연결 리스트를 이용하여 만든 리스트
- 조회 시 첫 노드부터 순회하기 때문에 탐색의 속도가 느리다.
- 반면 삽입과 삭제 시 가리키고 있는 주소 값만 변경해주면 되기 때문에 ArrayList에 보다 효율적이다.
public class LinkedListTest {
public static void main(String[] args){
LinkedList<String> colors = new LinkedList<>(Arrays.asList("black","white"));
//add
colors.add("pink");
//for-loop print
for(String color: colors) {
System.out.println(color); //[black white pink]
}
}
}
😊Set
순서가 없는 데이터의 집합(중복 허용x)
1. HashSet
- Hash Table을 이용하여 만든 Set
- 중복을 허용하지 않고, 순서를 갖지 않는다.
public class HashSetTest {
public static void main(String[] args){
Set<String> fruits = new HashSet<>(Arrays.asList("apple","banana"));
//add - 새로운 fruit 추가
fruits.add("grape");
//add - 중복된 fruit 이므로 저장 X
fruits.add("apple");
//for-loop print
for(String fruit : fruits){
System.out.println(fruit); // [banana apple grape]
}
}
}
2. TreeSet
- RBT(Red-Black Tree)를 이용하여 만든 Set
- 중복을 허용하지 않고, 순서를 갖지 않는다.
- 정렬된 상태를 유지하기 때문에 삽입, 삭제 시 HashSet보다 성능이 떨어진다.
public class TreeSetTest {
public static void main(String[] args){
Set<String> sports = new TreeSet<>(Arrays.asList("baseball","soccer"));
//add - 새로운 sport 추가
sports.add("golf");
//add - 중복된 sport이므로 저장 X
sports.add("baseball");
//for-loop print
for(String sport : sports){
System.out.println(sport); //[baseball golf soccer] <- 자동 정렬
}
}
}
😊Map
<Key,Value>데이터의 집합(Key중복 허용x)
1. HashMap
- Hash Table을 이용하여 만든 Map
- Key는 중복이 불가능하고, Value는 중복이 가능하다.
public class HashMapTest {
public static void main(String[] args){
Map<String,Integer> store = new HashMap<>();
//add
store.put("water",1);
store.put("fruit",5);
//add - water가 이미 있으므로 새로운 value로 업데이트
store.put("water",2);
//keyset을 이용하여 print
for(String key : store.keySet()){
System.out.println(key + ":" + store.get(key)); //[fruit:5 water:2]
}
}
}
2. TreeMap
- RBT(Red-Black Tree)를 이용하여 만든 Map
- Key는 중복이 불가능하고, Value는 중복이 가능하다.
- Key를 기준으로 정렬된 상태를 유지하기 때문에 삽입, 삭제 시 HashMap보다 성능이 떨어진다.
public class TreeMapTest {
public static void main(String[] args){
Map<String,Integer> clothes = new TreeMap<>();
//add
clothes.put("shoes",2);
clothes.put("jean",1);
//add - jean이 이미 있으므로 새로운 value로 업데이트
clothes.put("jean",3);
//keyset을 이용하여 print
for(String key : clothes.keySet()){ //[jean:3 shoes:2] <-자동 정렬
System.out.println(key + ":" + clothes.get(key));
}
}
}
Reference : http://www.tcpschool.com/java/java_collectionFramework_concept
728x90
'Languages > Java' 카테고리의 다른 글
[Java] 멀티스레드 환경에서의 동시성 문제와 대책 (0) | 2023.04.12 |
---|---|
[Java] equals(), hashCode()를 재정의 해야 하는 이유 (0) | 2023.04.12 |
[Java] 상속과 인터페이스 개념 정리 (0) | 2023.04.10 |
[Java] 불변 객체(Immutable Object)란 무엇인가? (0) | 2023.04.09 |
[Java] static, static method 개념 정리 (0) | 2023.04.09 |
댓글