언어(Language)/Java

[Java] 자바 HashTable 개념 정리 및 활용

잇트루 2022. 9. 23. 04:00
반응형

HashTable

HashTable은 HashMap과 내부 구조가 동일하며, 사용 방법 또한 매우 유사하다. HashMap과 마찬가지로 키는 중복이 안되지만, 값은 중복을 허용한다.

HashTable과 HashMap의 차이점은 스레드와 관련이 있다.

HashTable의 경우 병렬 프로그래밍을 지원하여 병렬 처리를 하면서 자원의 동기화를 고려해야 하는 상황일 때 사용하기 적합하다. 그 외 병렬 처리를 하지 않거나 동기화를 고려하지 않는 상황이라면 HashMap을 사용한다.

 

또한, HashMap은 값으로 null이 입력이 가능하지만, HashTable에서는 null 입력이 불가능하다.

 

다음은 HashTable의 간단한 예제이다.

import java.util.*;

public class HashTableEx {
    public static void main(String[] args) {
        // HashTable 생성
        Hashtable<String, Integer> hashTable = new Hashtable<>();

        // Entry 객체 저장
        hashTable.put("부산", 1);
        hashTable.put("인천", 2);
        hashTable.put("대구", 3);
        hashTable.put("대전", 4);
        hashTable.put("광주", 5);
        hashTable.put("울산", 6);

        // 저장된 총 Entry 수 얻기
        int size = hashTable.size();
        System.out.println(size);

        // 객체 찾기
        Object object = hashTable.get("부산");
        System.out.println(object);

        // key를 요소로 가지는 Set 생성
        Set<String> keySet = hashTable.keySet();
        System.out.println(keySet);

        // value 값 읽기
        Iterator<String> keyIterator = keySet.iterator();
        while (keyIterator.hasNext()) {
            String key = keyIterator.next();
            Integer value = hashTable.get(key);
            System.out.println("키 : " + key + " 값 : " + value);
        }

        // 객체 삭제 후 크기 출력
        hashTable.remove("부산");
        System.out.println(hashTable.size());

        // Entry 객체를 요소로 가지는 Set을 생성
        Set<Map.Entry<String, Integer>> entrySet = hashTable.entrySet();

        // entrySet을 순회하면서 value 값 읽기
        Iterator<Map.Entry<String, Integer>> entryIterator = entrySet.iterator();

        while (entryIterator.hasNext()) {
            Map.Entry<String, Integer> entry = entryIterator.next();
            String key = entry.getKey(); // Map.Entry 인터페이스의 메서드
            Integer value = entry.getValue(); // Map.Entry 인터페이스의 메서드
            System.out.println("키 : " + key + " 값 : " + value);
        }

        // 전체 객체 삭제
        hashTable.clear();
    }
}

HashMap과 동일한 방식으로 사용이 가능하다.

반응형