본문 바로가기

Java/Java 기초

Set과 Map


1. Set : 집합


데이터의 순서를 보장하지 않는다
데이터의 중복을 허용하지 않는다


(1) 구현클래스


HashSet : Set 인터페이스를 구현한 가장 대표적인 클래스
중복되는 값을 저장하면 무시한다.
인덱스가 존재하지 않아 순서를 보장하지 않으며 ArrayList나 배열처럼 값을 가져오는 것이 불가능하다
hashCode()가 반환하는 해시코드를 이용하여 데이터를 처리하며 속도가 상대적으로 빠르다
값의 존재유무를 파악할 때, 중복을 제거해야할 때 사용하기 좋다


(2) HashSet 주의사항


hashCode()를 사용하는 HashSet에 객체를 저장할 때
equals() 재정의 했다면 반드시 hashCode() 재정의 해주어야한다
일관성과 검색 효율성이 저하되는 것을 방지하기 위함이다
- 일관성 : equals() 메소드로 두 객체를 동일하다고 판단한 경우,
두 객체의 hashCode() 메소드는 항상 같은 값을 반환해야한다
HashSet이 동일한 객체를 중복으로 저장하지 않고 올바르게 동작할 수 있다
- 검색효율성 : 객체를 검색할 때 hashCode()값을 사용하여 저장위치를 찾아가므로
hashCode()메소드를 재정의하지 않으면 HashSet의 검색 성능이 저하될 수 있다

 

2. Map


데이터의 순서를 보장하지 않으나
데이터를 Key와 Value 한쌍으로 저장하여 Key로 데이터에 접근할 수 있다
그러므로 Key는 ArrayList의 Index와 비슷한 역할을 하며 중복을 허용하지 않는다
(index에 중복이 없는 것과 동일함)


(1) 구현클래스


1) HashMap
hashCode()가 반환하는 해시코들르 이용하며 검색속도가 상대적으로 빠르다
이미 저장된 Key를 가진 한쌍의 데이터를 넣게 되면 가장 마지막에 넣은 Value로 수정된다
(Value는 수정이 가능하다)
저장되지 않은 Key를 가진 한쌍의 데이터를 넣게되면 새롭게 추가된다

2) Hash
HashMap과 HashSet은 내부적으로 해시테이블을 사용하지만, 목적과 동작 방식이 다르다

Key는 해시함수를 통해서 해시(hash)로 변경되고 해시는 값(Value)과 매칭되어 저장소에 저장된다


(2) Key : 고유한 값


1) 해시함수 : Key를 해시로 바꿔주는 역할을 한다
2) 해시(Hash) : 해시함수를 통해 나온 결과물, 저장소(bucket, slot)에서 값(Value)과 매칭되어 저장된다
3) 값(Value) : 저장소에 최종적으로 저장되는 값으로 Key와 매칭되어 저장, 삭제, 검색, 접근이 가능하다

=> Key, 해시함수, 해시, Value

'Java > Java 기초' 카테고리의 다른 글

Thread  (0) 2024.01.17
컬렉션 프레임워크  (0) 2024.01.03
Object , Wrapper 클래  (0) 2024.01.02
예외처리, API  (0) 2023.12.26
내부 클래스, 익명 클래스, 람다식  (0) 2023.12.22