자료구조의 형태들을 바탕으로 객체들을 효율적으로 추가, 삭제, 검색하도로 Java.util 패키지에 담아둔 것을 이것을 Collction Framework라고 한다.
데이터 구조를 표준하여 유연하고 성능 최적화된 데이터 관리 방법을 제공하는 장점있지만, 단점으로는 복잡한 사용법과 성능 저하 가능성이 있다.
각각의 인터페이스에 포함되어 각각의 구현 클래스가 무엇인지 알고 있어야한다.
인터페이스 분류 | 특징 | 구현 클래스 |
---|---|---|
List | - 순서를 유지하고 저장 | ArrayList, Vector, LinkedList |
- 중복 저장 가능 | ||
Set | - 순서를 유지하지 않고 저장 | HashSet, TreeSet |
- 중복 저장 안됨 | ||
Map | - 키와 값으로 구성된 엔트리 저장 | HashMap, Hashtable, TreeMap, Properties |
- 키는 중복 저장 안됨 |
ArrayList는 컬렉션에서 가장 많이 사용되는 컬렉션.
ArrayList는 중간 삽입/삭제 시 물리적 메모리 위치를 이동하며, 배열 확장이 발생하면 전체 데이터가 새로운 메모리 위치로 복사됩니다.
//ArrayList 생성
List<E> list = new ArrayList<E>();
List list = new ArrayList();
LinkedList는 이중 연결 리스트로 구현되어 있어, 각 요소가 이전 요소와 다음 요소에 대한 참조(포인터)를 가지고 있습니다.
LinkedList는 삽입과 삭제 시 물리적 이동 없이 포인터(주소값)만 변경됩니다.
빈번한 객체 삭제와 삽입이 일어나는 곳에서는 ArrayList보다는 LinkedList를 사용하는 것이 좋다.
사용방법은 List 사용법과 같다.
기능 | 메소드 | 설명 |
---|---|---|
객체 추가 | boolean add(E e) | 주어진 객체를 성공적으로 저장하면 true 를 리턴하고, 중복 객체면 false 를 리턴 |
객체 검색 | boolean contains(Object o) | 주어진 객체가 저장되어 있는지 여부 |
isEmpty() | 컬렉션이 비어 있는지 조사 | |
Iterator<E> iterator() | 저장된 객체를 한 번씩 가리키는 반복자 리턴 | |
int size() | 저장되어 있는 전체 객체 수 리턴 | |
객체 삭제 | void clear() | 저장된 모든 객체를 삭제 |
boolean remove(Object o) | 주어진 객체를 삭제 |
Set<E> set = new HashSet<E>();
Set set = new new HashSet(); //잘사용하지 않음
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
public class HashSetExample {
public static void main(String[] args) {
// HashSet 생성
Set<String> set = new HashSet<>();
// 요소 추가
set.add("Apple");
set.add("Banana");
set.add("Cherry");
set.add("Apple"); // 중복된 요소는 추가되지 않음
// HashSet 출력
System.out.println("HashSet 내용: " + set);
// 요소 존재 여부 확인
System.out.println("HashSet에 Apple이 있는가? " + set.contains("Apple"));
System.out.println("HashSet에 Mango가 있는가? " + set.contains("Mango"));
// 요소 제거
set.remove("Banana");
System.out.println("Banana 삭제 후 HashSet 내용: " + set);
// Set의 크기
System.out.println("HashSet 크기: " + set.size());
// HashSet 반복 (Iterator 사용)
System.out.println("HashSet 요소:");
Iterator<String> iterator = set.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
// 모든 요소 삭제
set.clear();
System.out.println("HashSet이 비어 있는가? " + set.isEmpty());
}
}
결과값
HashSet 내용: [Apple, Banana, Cherry]
HashSet에 Apple이 있는가? true
HashSet에 Mango가 있는가? false
Banana 삭제 후 HashSet 내용: [Apple, Cherry]
HashSet 크기: 2
HashSet 요소:
Apple
Cherry
HashSet이 비어 있는가? true