출처 - Java의 정석 기초편 (남궁 성)
1. HashMap
- Map인터페이스를 구현: 순서 X, 중복(키 X, 값 O)
- Hashtable(old, 동기화 O) ≒ HashMap(new, 동기화 X)
- LinkedHashMap: 저장순서 유지
- TreeMap ≒ TreeSet(키-값 저장 외 같음)
Entry[] table;
class Entry { // 객체지향코드
Object key;
Object value;
}
2. HashMap의 키(key)와 값(value)
- 해싱(hashing): 해시함수→해시테이블에 데이터 저장, 검색→데이터 검색 빠름
- 해시테이블: 배열(접근성)과 링크드 리스트(변경 용이) 조합
- 해시코드(해시 함수 반환값)에 대응하는 배열의 링크드 리스트에서 키와 일치하는 데이터 검색
- 해시함수는 같은 키에 대해 항상 같은 해시코드 반환
- 서로 다른 키라도 같은 값의 해시코드 반환할 수 있음
3. HashMap 메서드
HashMap map = new HashMap();
map.put("myID", "1234");
map.put("asdf", "1111");
map.put("asdf", "1234"); // 기존 값 덮어씀
HashMap() // 생성자
HashMap(int initialCapacity)
HashMap(int initialCapacity, float loadFactor)
HashMap(Map m)
void clear()
Object clone()
boolean containsKey(Object key)
boolean containsValue(Object value)
Set entrySet() // 읽어오기
Set keySet() // 읽어오기
Collection values() // 읽어오기
Object get(Object key)
Object getOrDefault(Object key, Object defaultValue) // 지정된 키의 값(객체) 없으면 지정값 반환
boolean isEmpty()
Object put(Object key, Object value) // 지정된 키-값 추가
void putAll(Map m) // 추가
Object remove(Object key)
Object replace(Object key, Object value) // 변경
boolean replace(Object key, Object oldValue, Object newValue)
int size()
4. Collections클래스
- 컬렉션을 위한 유틸 메서드(static) 제공
- 채우기, 복사, 정렬, 검색: fill(), copy(), sort(), binarySearch() - Arrays와 동일
- 동기화: synchronizedXXX()
- 변경불가: unmodifiableXXX() - 읽기전용
- 싱글톤: singletonXXX() - 객체 1개만 저장
- 한 종류의 객체만 저장: checkedXXX() - 지네릭스
5. 컬렉션 동기화
- 동기화 필요
List syncList = Collections.synchronizedList(new ArrayList(...));
static Collection synchronizedCollection(Collection c)
static List synchronizedList(List list)
static Set synchronizedSet(Set s)
static Map synchronizedMap(Map m)
static SortedSet synchronizedSortedSet(SortedSet s)
static SortedMap synchronizedSortedMap(SortedMap m)
// 메서드가 있다 정도 알아두기
6. 변경불가 컬렉션
- 읽기전용
static Collection unmodifiableCollection(Collection c)
static List unmodifiableList(List list)
static Set unmodifiableSet(Set s)
static Map unmodifiableMap(Map m)
static SortedSet unmodifiableSortedSet(SortedSet s)
static SortedMap unmodifiableSortedMap(SortedMap m)
7. 싱글톤 컬렉션
- 객체 1개만 저장
static List singletonList(Object o)
static Set singleton(Object o) // singletonSet 아님 주의
static Map singletonMap(Object key, Object value)
8. 단일 컬렉션
- 한 종류의 객체만 저장
- 지네릭스로 처리할 수 있지만 호환성 때문에 제공
List list = new ArrayList();
List checkedList = checkedList(list, String.class); // String만 저장 가능
checkedList.add("add"); // OK
checkedList.add(new Integer(3)); // 에러!!! ClassCastException 발생
static Collection checkedCollection(Collection c, Class type)
static List checkedList(List list, Class type)
static Set checkedSet(Set s, Class type)
static Map checkedMap(Map m, Class keyType, Class valueType)
static Queue checkedQueue(Queue queue, Class type)
static SortedSet checkedSortedSet(SortedSet s, Class type)
static SortedMap checkedSortedMap(SortedMap m, Class keyType, Class valueType)
9. 컬렉션 클래스 정리
- ArrayList:배열기반, 데이터 추가삭제 불리, 순차적 추가삭제는 제일 빠름, 임의 요소 접근성 뛰어남
- LinkedList: 연결기반, 데이터 추가삭제 유리, 임의 요소 접근성 안좋음
- HashMap: 배열과 연결이 결합, 검색에 최고성능
- TreeMap: 연결기반, 정렬과 검색(범위검색) 적합, 검색성능은 HashMap보다 떨어짐
- Stack: Vector 상속받아 구현
- Queue: LinkedList가 Queue인터페이스를 구현
- Properties:Hashtable 상속받아 구현
- HashSet: HashMap 이용해서 구현
- TreeSet: TreeMap 이용해서 구현
- LinkedHashMap, LinkedHashSet: HashMap, HashSet에 저장순서 유지기능 추가
'Java' 카테고리의 다른 글
열거형(enum) (0) | 2022.11.04 |
---|---|
지네릭스(Generics) (0) | 2022.11.04 |
HashSet, TreeSet(binary search tree) (0) | 2022.10.29 |
Arrays, Comparable, Comparator (0) | 2022.10.28 |
Iterator (0) | 2022.10.28 |