2024. 2. 20. 03:41ㆍJava
Collection Framework 란 무엇인가
자바의 Collection Framework 란 여러 객체를 구조화하여 제공하는 프레임워크를 의미한다.
자바 컬렉션은 데이터 검색, 정렬, 삽입, 조작, 삭제 등을 수행할 수 있는 기능을 제공한다.
- 컬렉션 (Collection) 은 객체의 모음이다.
- 프레임워크 (Framework) 는 미리 만들어진 코드 아키텍쳐로, 클래스들과 인터페이스들을 포함한다.
Collection Framwork 의 계층
- Collection 클래스는 Iterable 클래스를 상속한다.
- java.util 패키지에 Collection Framework 의 모든 클래스와 인터페이스가 포함되어 있다.
- 하위에는 List, Queue, Set 인터페이스가 있다.
- 각 인터페이스 하위에 ArrayList, PriorityQueue, HashSet 등 대표적 자료구조의 구현 클래스들이 존재한다.
Collection 인터페이스의 대표적 메서드들
- add(), addAll() : collection 에 요소를 추가한다.
- remove(), removeAll(), removeIf() : collection 의 요소를 제거한다.
- retainAll() : 특정 요소를 제외한 모든 요소를 제거한다.
- size() : collection 의 크기를 반환한다.
- clear() : collection 을 비운다.
- contains(), containAll() : 특정 요소의 포함 여부를 반환한다.
- iterator() : iterator 를 반환한다.
- toArray() : collection 을 배열로 변환하여 반환한다.
- isEmpty() : collection 이 비어있는지 여부를 반환한다.
Collection 인터페이스의 구현체들
List 인터페이스
데이터를 순서대로 저장하며, 같은 데이터가 여러개 존재할 수 있는 자료구조
List<String> stringList = new ArrayList<>();
List<Long> longList = new LinkedList<>();
List<Integer> integerList = new Vector<>();
List<Float> floatList = new Stack<>();
ArrayList 인터페이스
데이터를 여러개 저장하지만, 순서는 요소를 넣은 대로 정해지며 바뀌지 않는 자료구조
ArrayList<Integer> integerArrayList = new ArrayList<>();
integerArrayList.add(1);
integerArrayList.add(2);
integerArrayList.add(3);
integerArrayList.add(4);
Iterator<Integer> iterator = integerArrayList.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next()); // 1 2 3 4
}
LinkedList 인터페이스
ArrayList와 비슷하지만, 데이터 shifting 이 필요없어 수정이 빠르다는 특징이 있는 자료구조
LinkedList<Long> longLinkedList = new LinkedList<>();
longLinkedList.add(1L);
longLinkedList.add(2L);
longLinkedList.add(3L);
longLinkedList.add(4L);
Iterator<Long> iterator = longLinkedList.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next()); // 1 2 3 4
}
Vector
ArrayList와 비슷하지만, Collection Framework 에 포함되지 않은 메서드들을 더 제공하는 자료구조
Vector<String > stringVector = new Vector<>();
stringVector.add("a");
stringVector.add("b");
stringVector.add("c");
stringVector.add("d");
Iterator<String> iterator = stringVector.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next()); // a b c d
}
Stack
Vector 의 서브클래스로, LIFO (Last In First Out) 구조
Stack<String> stringStack = new Stack<>();
stringStack.push("a");
stringStack.push("b");
stringStack.push("c");
stringStack.push("d");
stringStack.push("e");
stringStack.pop();
Iterator<String> iterator = stringStack.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next()); // a b c d
}
Queue 인터페이스
FIFO (First In First Out) 형태의 자료구조.
Queue<String> q1 = new PriorityQueue<>();
Queue<Integer> q2 = new ArrayDeque<>();
PriorityQueue
우선순위 큐. 설정한 우선순위에 따라 출력 순서가 정해지는 큐
PriorityQueue<Integer> queue = new PriorityQueue<>();
queue.add(1);
queue.add(2);
queue.add(3);
queue.add(4);
System.out.println("head: " + queue.element()); // 1
System.out.println("head: " + queue.peek()); // 1
Iterator<Integer> iterator = queue.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next()); // 1 2 3 4
}
queue.remove();
queue.poll();
Iterator<Integer> iterator2 = queue.iterator();
while (iterator2.hasNext()) {
System.out.println(iterator2.next()); // 3 4
}
Dequeue 인터페이스
큐 인터페이스의 상속 구현체로, 동일하게 FIFO 원칙을 따르나 삽입과 삭제를 양방향에서 할 수 있는 차이가 있다.
Deque<String> deque = new ArrayDeque<>();
ArrayDeque
dequeue 구현체. arrayList, stack 보다 빠른 성능을 가지고 있다.
Deque<String> deque = new ArrayDeque<>();
deque.add("a");
deque.add("b");
deque.add("c");
for (String s : deque) {
System.out.println(s); // a b c
}
Set 인터페이스
집합 (Set) 은 java.util 하위 인터페이스이다. 가장 큰 특징은 다른 자료구조와는 달리 중복 되는 값을 허용하지 않는다는 것이다.
Set<String> s1 = new HashSet<>();
Set<Integer> s2 = new LinkedHashSet<>();
Set<Long> s3 = new TreeSet<>();
HashSet
Set 인터페이스 구현체. 데이터의 중복을 hash table을 통해 판단한다.
HashSet<String> set = new HashSet<>();
set.add("a");
set.add("b");
set.add("c");
set.add("d");
Iterator<String> iterator = set.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next()); // a b c d
}
LinkedHashSet
Set, HashSet 상속 구현체. 이름에서 알 수 있듯 역시 중복값 비허용이고, 입력 순서대로의 순서를 보장하며, null 값을 허용한다.
LinkedHashSet<String> set = new LinkedHashSet<>();
set.add("a");
set.add("b");
set.add("c");
set.add("d");
Iterator<String> iterator = set.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next()); // a b c d
}
SortedSet 인터페이스
순서를 보장하는 Set. 크기 순서대로 정렬된다.
SortedSet<String> set = new TreeSet<>();
TreeSet
SortedSet 구현체. 크기순으로 정렬되어 있는 데이터에 접근할 때 빠른 접근속도를 자랑한다.
TreeSet<String> set = new TreeSet<>();
set.add("b");
set.add("a");
set.add("d");
set.add("c");
Iterator<String> iterator = set.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next()); // a b c d
}
Resources
'Java' 카테고리의 다른 글
자바의 네트워킹과 소켓 통신 (1) | 2024.02.27 |
---|---|
자바의 직렬화 (Serialization) (0) | 2024.02.22 |
자바의 메모리 관리 (1) | 2024.02.13 |
자바의 HTTP 통신 라이브러리 (0) | 2024.02.09 |
자바의 파일 입출력 (0) | 2024.02.09 |