[Java | 자료구조] HashMap, HashSet

알린·2024년 3월 21일

코딩테스트

목록 보기
4/15

해싱(Hashing)

  • 키 값에 대한 산술적 연산에 의해 테이블의 주소를 계산하여 항목에 접근

HashTable

  • 키 값의 연산에 의해 직접 접근이 가능한 구조
  • <key, value>로 이루어짐

HashMap

  • Map 인터페이스의 구현체로 value들이 key에 mapping되어있음
    👉 <key, value>
  • key중복 불가능, value중복 불가능(null 사용 가능)
    👉 만일 기존에 저장된 key와 동일한 키로 value를 저장하면 기존의 value는 새로운 value로 대체됨
  • Hashing을 사용하기 때문에 많은 양의 데이터 검색에 있어서 뛰어난 성능

코드

HashMap<Integer, String> map = new HashMap<Integer, String>();
HashMap<Integer, String> map = new HashMap<>();  // 타입 파라미터 생략 가능

map.put(1, "사과");  // Key 삽입
map.remove(1);  // key값으로 value 삭제
map.clear();  // 전체 삭제

map.values(); // 저장된 모든 value 출력
map.get(1);  // Key값으로 value 반환
map.containsKey(1);  // Key 포함여부 반환(있으면 true, 없으면 false)
map.containsValue("사과");  // value 포함 여부 반환 

map.isEmpty();  // HashMap 비어있는지 여부 반환
map.keySet();  // HashMap에 저장된 모든 Key 반환
map.size();  // HashMap에 저장된 요소의 개수 반환

// 출력
// 전체 출력
System.out.println(map); // {1=사과}

// 저장된 key 값 확인
for (Integer i : map.keySet()) {
  System.out.println(map.get(i));  // 사과
}

// entrySet() 활용
for (Entry<Integer, String> entry: map.entrySet())
  System.out.println(entry.getKey() + entry.getValue());  // 1 사과

HashSet

  • Set 인터페이스의 구현체로 HashMap을 사용해 데이터를 저장
  • 객체 그 자체를 저장
    👉 key: 객체 자체 / value: 내부 구현 코드에서 필드로 선언한 객체
  • 객체 자체를 저장하기 때문에 중복 불가능(단 하나의 null값만 사용 가능)
  • HashMap보다 느림

코드

HashSet<Integer> set = new HashSet<>();

set.add(1) // 값 추가
set.remove(1) // 값이 1인 데이터 삭제
set.removeAll(set2) // set의 데이터 중 set2에 들어있는 데이터를 모두 삭제
set.retainAll(set2) // set의 데이터 중 set2에 들어있지 않은 데이터를 모두 삭제
set.clear() // 모든 데이터 삭제
set.size() // 크기 반환
set.contains(1) // 값 1이 있으면 true, 없으면 false

// 값 출력
// 방법 1: get 메소드가 없으므로 원소에 접근하려면 이터레이터 사용
Iterator iter = set.iterator();
while (iter.hasNext())
	System.out.println(iter.next());

// 방법 2: for-each문으로 원소에 접근
for (String item: set)
	System.out.println(item);
profile
짱이 되고싶은 개발 기록

0개의 댓글