✅ 1. ArrayList vs Vector
| 항목 | ArrayList | Vector |
| 쓰레드 세이프 | ❌ (동기화 안됨) | ✅ (모든 메서드 동기화됨) |
| 성능 | 빠름 | 느림 (동기화 비용) |
| 용도 | 단일 쓰레드 환경 | 멀티 쓰레드 환경 (하지만 요즘은 Collections.synchronizedList() 추천) |
✅ 2. ArrayList의 구현 인터페이스
public class ArrayList<E> extends AbstractList<E>
implements List<E>, RandomAccess, Cloneable, Serializable
🔹 의미별 정리
| 인터페이스 | 설명 |
| List | 순서 있는 컬렉션, 인덱스 접근 지원 |
| RandomAccess | 빠른 임의 접근 가능함을 표시 (마커 인터페이스) |
| Cloneable | clone() 메서드 사용 가능 (마커 인터페이스) |
| Serializable | 직렬화 가능 (마커 인터페이스) |
📌 마커 인터페이스란?
: 내부에 메서드가 없고, "이 객체는 ~~ 기능을 가진다"는 표시 용도로 JVM이 내부적으로 체크합니다.
예: Cloneable 없으면 clone() 호출 시 CloneNotSupportedException 발생함.
✅ 3. ArrayList 생성자 3개
// 1. 기본 생성자 (초기 용량 10)
ArrayList<String> list1 = new ArrayList<>();
// 2. 초기 용량 지정
ArrayList<String> list2 = new ArrayList<>(20);
// 3. 다른 컬렉션 복사
ArrayList<String> list3 = new ArrayList<>(anotherCollection);
✅ 4. Set과 로드팩터
HashSet과 HashMap 내부는 HashMap 기반
- load factor: 해시 충돌을 줄이기 위한 해시 테이블 재해싱 기준
- 기본값은 0.75 → 75% 찼을 때 resize 발생
- 예: new HashSet<>(16, 0.75f)
✅ 5. Map은 컬렉션 뷰 사용
Map<String, String> map = new HashMap<>();
// 1. Key Set View
Set<String> keys = map.keySet();
// 2. Values View
Collection<String> values = map.values();
// 3. Entry Set View (Key + Value 묶음)
Set<Map.Entry<String, String>> entries = map.entrySet();
💡 entrySet() → Map.Entry<K,V> 객체들의 Set (전체 탐색, 반복문용)
✅ 6. Map vs Hashtable
| 항목 | HashMap | Hashtable |
| 동기화 | ❌ (비동기) | ✅ (동기화됨) |
| 성능 | 빠름 | 느림 |
| null 허용 | key/value에 null 허용 | ❌ 둘 다 불허 |
| 출시 시기 | Java 1.2 이후 | Java 1.0 초기부터 |
| 사용 권장 | ✅ | ❌ (Legacy) |
📌 Enumeration vs Iterator
- Hashtable의 elements()는 Enumeration 객체 반환 → 오래된 방식
- HashMap은 Iterator 사용
✅ 7. HashMap에서 hashCode()와 equals() 재정의 이유
- HashMap은 내부적으로 키를 저장할 때, hashCode()로 해시 계산 + equals()로 충돌 여부 확인합니다.
map.put(key, value); // 내부 동작
1. key.hashCode() → index 계산
2. 같은 index가 있을 경우 key.equals()로 동등성 비교
✅ 따라서,
- 사용자 정의 객체를 키로 쓸 땐 hashCode() + equals() 둘 다 재정의해야 충돌 없이 정상 작동합니다.
- 안 그러면 서로 다른 객체임에도 동일한 키로 오인하거나, 조회 실패함.
✅ 8. Properties 클래스 = Hashtable 확장
public class Properties extends Hashtable<Object, Object>
특징:
- key와 value가 모두 String 기반이어야 함
- 설정 파일 읽기/쓰기에 자주 사용
- load(InputStream) / store(OutputStream) 사용 가능
- getProperty(String key) / setProperty(String key, String value)
✅ 정리표
| 항목 | 설명 |
| ArrayList | 빠름, 비동기, 순차 자료에 적합 |
| Vector | 동기화 처리된 ArrayList, 레거시 |
| Set | 중복 제거, 해시 기반 HashSet이 대표 |
| Map.entrySet() | key-value 묶음을 다루는 컬렉션 뷰 |
| Hashtable | 동기화, null 불가, 구버전 스타일 |
| HashMap | 빠름, null 가능, hashCode/equals 재정의 필요 |
| Properties | 설정 저장용 클래스, Hashtable 기반 |
| load factor | 75% 차면 resize, 충돌 방지 목적 |
'기타 > 자바의 신' 카테고리의 다른 글
| (자바) 자바 I/O 기본 *자바의 신 DAY 10 (0) | 2025.07.13 |
|---|---|
| (자바)자바 쓰레드(Thread) 완전 정리 *자바의 신 (2) | 2025.07.11 |
| (자바) 내부 클래스란? (자바의 신 day7) (1) | 2025.07.01 |
| (자바)자바의 신 day6 - Java String 완벽 정리: intern(), 문자열 덧셈, 최적화 (0) | 2025.06.29 |
| (자바) 자바의 신 day5 - 자바에서 업캐스팅과 다운캐스팅, equals와 hashCode, toString의 역할 및 오버라이딩 이유 (0) | 2025.06.25 |