컬렉션은 동일한 타입을 묶어 관리하는 자료구조를 말한다.
배열과 다른 점은 데이터의 저장 용량을 동적으로 관리 할 수 있다.
컬렉션 프레임워크란 데이터를 저장하는 자료 구조와 데이터를 처리하는
알고리즘을 구조화하여 클래스로 구현해 놓은 것이다.
(인터페이스를 사용하여 구현되었다.)
주요 클래스 & 인터페이스
주요 인터페이스로 List<E>, Set<E>, Map<K,V>가 존재한다. 이 인터페이스를 상속받아 구현해 놓은 구현 클래스도 이미 만들어져 있다. 자주 사용되는 자료구조인 Stack<E>, Queue<E>도 구현클래스가 존재한다.
<>를 보면 알 수 있듯이 모든 클래스가 제네릭이다.
인터페이스와 이를 구현한 클래스가 잘 만들어져 있기 때문에 필요에 따라 사용하고 싶은 자료 구조를 가져다
쓰기만 하면 되기 때문에 편리하다.
모든 내용을 작성하기는 너무 길어지기 때문에 메서드 등의 자세한 정보는 공식 Java API 사이트에서 확인이 가능하다.
https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/ArrayList.html
List <E> 컬렉션 인터페이스
요소의 저장 순서가 유지되며, 배열과 달리 저장 공간이 동적으로 확장된다.
1. 주요 메서드
메서드 | 설명 |
boolean add(E e) | 해당 리스트(list)에 전달된 요소를 추가함. (선택적 기능) |
void add(int index, E e) | 해당 리스트의 특정 위치에 전달된 요소를 추가함. (선택적 기능) |
void clear() | 해당 리스트의 모든 요소를 제거함. (선택적 기능) |
boolean contains(Object o) | 해당 리스트가 전달된 객체를 포함하고 있는지를 확인함. |
boolean equals(Object o) | 해당 리스트와 전달된 객체가 같은지를 확인함. |
E get(int index) | 해당 리스트의 특정 위치에 존재하는 요소를 반환함. |
boolean isEmpty() | 해당 리스트가 비어있는지를 확인함. |
Iterator<E> iterator() | 해당 리스트의 반복자(iterator)를 반환함. |
boolean remove(Object o) | 해당 리스트에서 전달된 객체를 제거함. (선택적 기능) |
boolean remove(int index) | 해당 리스트의 특정 위치에 존재하는 요소를 제거함. (선택적 기능) |
E set(int index, E e) | 해당 리스트의 특정 위치에 존재하는 요소를 전달받은 객체로 대체함. (선택적 기능) |
int size() | 해당 리스트의 요소의 총 개수를 반환함. |
Object[] toArray() | 해당 리스트의 모든 요소를 Object 타입의 배열로 반환함. |
2. 예제 코드 ( ArrayList<> )
public static void main(String[]args) {
ArrayList<String> arr = new ArrayList<>();
arr.add("가"); arr.add("나"); arr.add("다"); arr.add("라"); arr.add("마");
System.out.println(arr.size()); //5 출력
arr.remove("다");
arr.remove("라");
System.out.println(arr.size()); //3 출력
System.out.println(arr.get(arr.size()-1)); //마 출력
}
Set <E> 컬렉션 인터페이스
요소의 중복을 허용하지 않으며 저장 순서가 유지되지 않는다.
1. 주요 메서드
메서드 | 설명 |
boolean add(E e) | 해당 집합(set)에 전달된 요소를 추가함. (선택적 기능) |
void clear() | 해당 집합의 모든 요소를 제거함. (선택적 기능) |
boolean contains(Object o) | 해당 집합이 전달된 객체를 포함하고 있는지를 확인함. |
boolean equals(Object o) | 해당 집합과 전달된 객체가 같은지를 확인함. |
boolean isEmpty() | 해당 집합이 비어있는지를 확인함. |
Iterator<E> iterator() | 해당 집합의 반복자(iterator)를 반환함. |
boolean remove(Object o) | 해당 집합에서 전달된 객체를 제거함. (선택적 기능) |
int size() | 해당 집합의 요소의 총 개수를 반환함. |
Object[] toArray() | 해당 집합의 모든 요소를 Object 타입의 배열로 반환함. |
2. 예제 코드 ( HashSet <> )
public static void main(String[] args) {
Set<String> hSet1 = new HashSet<>();
hSet1.add("가");
hSet1.add("나");
hSet1.add("다");
hSet1.add("가");
System.out.println(hSet1); // [가, 다, 나] 출력 (중복제거)
}
Map <K, V> 컬렉션 인터페이스
키와 값을 쌍으로 저장한다. (Key-Value)
키의 중복을 허용하지 않으며 값은 중복이 가능하다.
1. HashMap<K, V> 주요 메서드
메서드 | 설명 |
void clear() | 해당 맵(map)의 모든 매핑(mapping)을 제거함. |
boolean containsKey(Object key) | 해당 맵이 전달된 키를 포함하고 있는지를 확인함. |
boolean containsValue(Object value) | 해당 맵이 전달된 값에 해당하는 하나 이상의 키를 포함하고 있는지를 확인함. |
V get(Object key) | 해당 맵에서 전달된 키에 대응하는 값을 반환함. 만약 해당 맵이 전달된 키를 포함한 매핑을 포함하고 있지 않으면 null을 반환함. |
boolean isEmpty() | 해당 맵이 비어있는지를 확인함. |
Set<K> keySet() | 해당 맵에 포함되어 있는 모든 키로 만들어진 Set 객체를 반환함. |
V put(K key, V value) | 해당 맵에 전달된 키에 대응하는 값으로 특정 값을 매핑함. |
V remove(Object key) | 해당 맵에서 전달된 키에 대응하는 매핑을 제거함. |
boolean remove(Object key, Object value) | 해당 맵에서 특정 값에 대응하는 특정 키의 매핑을 제거함. |
V replace(K key, V value) | 해당 맵에서 전달된 키에 대응하는 값을 특정 값으로 대체함. |
boolean replace(K key, V oldValue, V newValue) | 해당 맵에서 특정 값에 대응하는 전달된 키의 값을 새로운 값으로 대체함. |
int size() | 해당 맵의 매핑의 총 개수를 반환함. |
2. 예제 코드 ( HashMap<> )
public static void main(String[] args) {
String[] msg = {"Berlin", "Dortmund", "Frankfurt", "korea", "jp"};
HashMap<Integer, String> map = new HashMap<>();
for(int i=0; i<msg.length; i++) {
map.put(i, msg[i]);
}
Set<Integer> keys = map.keySet(); //Set을 활용한 중복제거
for(Integer n:keys) {
System.out.println(map.get(n));
}
}
컬렉션을 이용하여 구현의 부담을 덜 수 있게 되었다.
하지만 잘 가져다 쓰기 위해선 각 자료구조와 알고리즘의 특징과 장단점을 알고 있어야 한다.
API를 찾아보는 습관을 기르고 많이 구현해 보도록 하자 !
참고 문헌 : Do it! 자바 완전정복
자료출처 :
https://github.com/kimdh-hyw/chap17_collectionframework
'Java > 자바 이론' 카테고리의 다른 글
[Java] 자바 객체 정렬 Comparable과 Comparator의 이해 (0) | 2022.07.09 |
---|---|
[Java] 자바 제네릭(Generic)이란? (Feat. 오토박싱) (0) | 2022.07.09 |
[Java] 자바 쓰레드(Thread) & 동기화 (0) | 2022.07.06 |
[Java] 자바 내부 클래스 4종류 (Inner Class) (0) | 2022.07.05 |
[Java] 자바 인터페이스(Interface)란? (0) | 2022.07.05 |