Java Collections Framework
Java에서 컬렉션이란 데이터의 집합, 그룹을 의미하며, JCF(Java Collections Framework)는 이러한 데이터, 자료구조인 컬렉션과 이를 구현하는 클래스를 정의하는 인터페이스를 제공한다.


1. Set 인터페이스
순서를 유지하지 않는 데이터의 집합으로 데이터의 중복을 허용하지 않는다.
HashSet
- 가장빠른 임의 접근 속도
- 순서 예측 할 수 없음
HashSet<String> hs = new HashSet<String>();
hs.add("고양이");
hs.add("참새");
hs.add("물고기");
for(String e : hs) {
System.out.print(e + ", ");
}
// 고양이, 물고기, 참새
TreeSet
- 순서 예측 할 수 없음
- 정렬 방법 지정 가능
TreeSet<String> ts = new TreeSet<String>();
ts.add("고양이");
ts.add("참새");
ts.add("물고기");
System.out.println(ts);
// [고양이, 물고기, 참새]
ts.remove("참새"); // 참새 삭제
System.out.println(ts);
// [고양이, 물고기]
ts.clear(); // 전체 삭제
System.out.println(ts);
// Comparator.reverseOrder()로 내림차순 정렬
TreeSet<String> ts = new TreeSet<String>(Comparator.reverseOrder());
ts.add("고양이");
ts.add("참새");
ts.add("물고기");
System.out.println(ts);
// [참새, 물고기, 고양이]
2. List 인터페이스
순서가 있는 데이터의 집합으로 데이터의 중복을 허용한다.
LinkedList
- 양방향 포인터 구조로 데이터의 삽입, 삭제가 빈번할 경우 데이터의 위치 정보만 수정하면 되기에 유용
- 스택, 큐, 양방향 큐 등을 만들기 위한 용도로 쓰임
// 타입설정 int 타입만 적재 가능
LinkedList<Integer> list = new LinkedList<>();
// 생성시 초기값 설정
LinkedList<Integer> list2 = new LinkedList<Integer>(Arrays.asList(1,2));
LinkedList<String> list = new LinkedList<String>(Arrays.asList("A","B","C"));
// 가장 앞에 데이터 추가
list.addFirst("new");
// 가장 뒤에 데이터 추가
list.addLast("last");
System.out.println(list);
// [new, A, B, C, last]
// 인덱스 1에 데이터 new 추가
list.add(1,"new");
System.out.println(list);
// [A, new, B, C]

Vector
과거에 대용량 처리를 위해 사용했으며, 내부에서 자동으로 동기화처리가 일어나 비교적 성능이 좋지 않고 무거워 잘 쓰이지 않음
ArrayList
- 단방향 포인터 구조로 각 데이터에 대한 인덱스를 가지고 있어 조회 기능에 성능이 뛰어남
- 일반적인 배열은 처음 선언한 배열의 크기(길이)를 변경할 수 없다. 이를 정적 할당(static allocation)이라고 한다.
- 그러나 ArrayList는 리스트의 길이가 가변적이다. 이를 동적 할당(dynamic allocation)이라고 한다.
ArrayList<String> list = new ArrayList<>(8);
list.add("1");
list.add("2");
list.add("3");
list.add("4");
list.add("5");
// 2번째 인덱스 자리의 요소 삭제
list.remove(2);
System.out.println(list); // [1, 2, 4, 5]
// list의 데이터를 모두 비운다.
list.clear();
System.out.println(list); // []
3. Map 인터페이스
키(Key), 값(Value)의 쌍으로 이루어진 데이터의 집합으로, 순서는 유지되지 않으며 키(Key)의 중복을 허용하지 않으나, 값(Value)의 중복은 허용한다.
Hashtable
- HashMap 보다는 느리지만 동기화 지원
- null 불가
HashMap
- 중복과 순서가 허용되지 않으며 null 값이 올 수 있다.
HashMap<Integer, String> hmap = new HashMap<Integer, String>();
hmap.put(0,"사과");
hmap.put(11, "바나나");
hmap.put(23, "고양이");
hmap.put(5, "가방");
System.out.println("키 11의 값 = " + hmap.get(11));
// 키 11의 값 = 바나나
// 요소 제거 - remove(key)
hmap.remove(5);
System.out.println(hmap);
// {0=사과, 23=고양이, 11=바나나}
TreeMap
- 정렬된 순서대로 키(Key)와 값(Value)을 저장하여 검색이 빠름
'자바' 카테고리의 다른 글
| [Java] JSON 변환하기 : json-simple (0) | 2024.12.03 |
|---|---|
| [eclipse] 이클립스 셋팅 (0) | 2024.01.27 |
| [Java] DB 연결 (0) | 2023.07.19 |
| [Java] 익명객체 (0) | 2023.07.18 |
| [JAVA] HashMap (0) | 2023.05.17 |