
주요 구현 클래스
1. ArrayList
- 내부적으로 배열을 사용하여 데이터를 저장
- 빠른 읽기(랜덤 엑세스)를 지원
- 삽임 및 삭제는 상대적으로 느림(특히 중간 위치에서)
2. LinkedList
- 내부적으로 이중 연결 리스트(Doubly Linked List)를 사용
- 삽입 및 삭제가 빠름(특히 중간 위치에서)
- 읽기(랜덤 엑세스)는 느림
3. Vector
- ArrayList와 비슷하지만 Thread-Safe
- 동기화 지원으로 인해 속도가 느림
* 주요 메서드
- add(E element) : 요소 추가
- get(int index) : 특정 인덱스의 요소 반환
- remove(int index) : 특정 인덱스의 요소 제거
- size() : 요소 개수 반환
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
public class ListExample {
public static void main(String[] args) {
// ArrayList 사용
List<String> arrayList = new ArrayList<>();
arrayList.add("Apple");
arrayList.add("Banana");
arrayList.add("Apple"); // 중복 허용
arrayList.add("Cherry");
System.out.println("ArrayList = " + arrayList);
// LinkedList 사용
List<String> linkedList = new LinkedList<>(arrayList); // 기존 리스트 복사
linkedList.remove("Banana"); // 특정 요소 제거
System.out.println("LinkedList after removing 'Banana : " + linkedList);
// 인덱스를 이용한 접근
System.out.println("Fisrt element in ArrayList : " + arrayList.get(0));
}
}
주요 구현 클래스
- 내부적으로 해시 테이블을 사용
- 삽입 순서가 유지되지 않음
- null값 허용(1개만)
- HashSet과 비슷하지만 삽입 순서를 유지
- 순서를 보장하며 성능은 HashSet보다 약간 느림
- 내부적으로 이진 검색 트리(Red-Black-Tree)를 사용
- 데이터가 자동으로 정렬됨(오름차순 또는 사용자 정의 순서)
- null값 허용하지 않음
* 주요 메서드
- add(E element) : 요소 추가
- get(int index) : 특정 인덱스의 요소 반환
- remove(int index) : 특정 인덱스의 요소 제거
- size() : 요소 개수 반환
import java.util.HashSet;
import java.util.Set;
public class SetExample {
public static void main(String[] args) {
Set<String> set = new HashSet<>();
// 데이터 추가
set.add("Dog");
set.add("Cat");
set.add("Bird");
set.add("Dog"); // 중복은 허용되지 않음
// 데이터 출력
System.out.println("Set 내용 :");
for (String item : set) {
System.out.println(item);
}
// 특정 요소 확인
System.out.println("\nSet에 'Cat'이 있나? " + set.contains("Cat"));
// 요소 삭제
set.remove("Cat");
System.out.println("\n'Cat' 삭제 후 : ");
for (String item : set) {
System.out.println(item);
}
}
}
주요 구현 클래스
- 내부적으로 해시 테이블을 사용
- 삽입 순서가 유지되지 않음
- null키와 다수의 null값 허용
- HashMap과 비슷하지만 삽입 순서를 유지
- 순서가 중요한 경우 유용
- 내부적으로 이진 검색 트리(Red-Black-Tree)를 사용
- 키가 자동으로 정렬됨(오름차순 또는 사용자 정의 순서)
- null 키 허용하지 않음
- HashMap과 비슷하지만 Thread-Safe
- null키와 값 허용하지 않음
* 주요 메서드
- put(K key, V value) : 키-값 쌍 추가
- get(Object key) : 특정 키에 대한 값 반환
- remove(Object key) : 특정 키의 키-값 쌍 제거
- containsKey(Object key) : 특정 키 포함 여부 확인
- containsValue(Object value) : 특정 값 포함 여부 확인
- size() : 키-값 쌍의 개수 반환
import java.util.HashMap;
import java.util.Map;
public class MapExample {
public static void main(String[] args) {
Map<Integer, String> map = new HashMap<>();
// 데이터 추가
map.put(1, "One");
map.put(2, "Two");
map.put(3, "three");
map.put(2, "Duplicate"); // 같은 키는 덮어씌워짐
// 데이터 출력
System.out.println("Map 내용 : ");
for (Map.Entry<Integer, String> entry : map.entrySet()) {
System.out.println("Key : " + entry.getKey() + ", Value : " + entry.getValue());
}
// 특정 키의 값 가져오기
System.out.println("\nKey 2의 값 : " + map.get(2));
// 요소 삭제
map.remove(1);
System.out.println("\nKey 1 삭제 후 : ");
for (Map.Entry<Integer, String> entry : map.entrySet()) {
System.out.println("Key : " + entry.getKey() + ", Value : " + entry.getValue());
}
}
}
List : 순서가 중요하고, 중복된 데이터를 허용해야 하는 경우
ex.) 사용자 입력 데이터, 작업 대기열
Set : 중복을 제거하고 고유한 데이터만 유지해야 하는 경우
ex.) 유일한 사용자 ID, 중복 없는 태그
Map : 키를 기반으로 데이터를 저장하고 빠르게 검색해야 하는 경우
ex.) 설정 값 저장, 사용자 정보(키 : 사용자ID, 값 : 사용자 이름)