CS/Java

Hashtable

Ynghan 2023. 12. 13. 21:36
Hashtable<String, String> cds = new Hashtable<String, String>();

위 코드 실행시,

    public Hashtable() {
        this(11, 0.75f);
    }

해당 코드가 실행됨.

`Hashtable<String, String> cds = new Hashtable<String, String>();` 코드를 실행하면, 매개변수가 없는 생성자인 `public Hashtable()`가 호출됩니다. 이 생성자는 초기 용량(capacity)을 11로, 로드 팩터(load factor)를 0.75로 설정하는 `this(11, 0.75f);`를 호출합니다.

Q : 초기 용량과 로드 팩터는 어떤 기능을 하는 변수인가?

초기 용량(capacity)로드 팩터(load factor)는 Hashtable이나 HashMap 같은 해시 기반의 자료구조에서 중요한 역할을 하는 변수들이다.
1. 초기 용량(Capacity)
이것은 해시 테이블에서 내부적으로 유지하는 버킷(bucket) 배열의 크기를 가리킨다. 버킷은 실제로 키-값 쌍을 저장하는 곳이다. 초기 용량은 해시 테이블이 생성될 때 설정되며, 이후에는 데이터가 추가됨에 따라 자동으로 조정된다.
2. 로드 팩터(Load Factor)
로드 팩터는 해시 테이블의 전체 크기에 대한 데이터의 비율을 나타내는 값이다. 예를 들어 로드 팩터가 0.75라면, 해시 테이블의 75%가 채워지면, 해시 테이블의 크기를 늘리는 리해싱(Rehashing)이 발생한다.

Hashtable<String, String> cds = new Hashtable<String, String>();
...
Enumeration<String> e = cds.keys();

Hashtable<String, String>.keys()
: Hashtable의 키 값들이 요소로 있는 Enumeration<String> 객체 반환

 

for (Enumeration<String> e = cds.keys(); e.hasMoreElements();) {
    String name = (String)e.nextElement();
    JMenuItem menuItem = new JMenuItem(name);
    menu.add(menuItem); 
    menuItem.addActionListener(event -> {
        imageComponent.setIcon(new ImageProxy(getCDUrl(event.getActionCommand())));
        frame.repaint();
    });
}

>> e은 Hashtable을 순회할 수 있는 기능을 가진 Enumeration 객체이다. 
이 객체는 Hashtable의 키 값으로 구성되어 있다. 이 객체의
다음 요소가 있다면 반복한다.


Q : Hashtable<String, String>에서 <String, String>은 어떤 자료 구조를 사용하는가?

`Hashtable<String, String>`에서 `<String, String>`은 제네릭(Generic)을 사용한 것입니다. 제네릭클래스 내부에서 사용할 데이터 타입을 외부에서 지정하는 방법을 제공합니다. 즉, `<String, String>`은 Hashtable이 키(Key)와 값(Value)으로 String 타입을 사용하도록 지정한 것입니다.
Hashtable은 키-값 쌍으로 이루어진 데이터를 저장하는 자료 구조입니다. 키-값 쌍은 Hashtable 내부의 버킷(bucket)이라고 하는 공간에 저장됩니다. 키는 해시 함수를 통해 버킷의 인덱스로 변환되고, 그 인덱스 위치에 해당하는 버킷에 값이 저장됩니다. 이렇게 저장된 키-값 쌍은 키를 통해 빠르게 검색하거나 접근할 수 있습니다.

Q : 버킷의 데이터 저장 방식을 지칭하는 용어가 있는가?

버킷의 데이터 저장 방식은 '해싱(Hashing)'이라는 용어로 지칭됩니다. 해싱은 키를 값에 매핑하는 프로세스로, 해시 함수를 사용하여 임의의 길이의 데이터를 고정된 길이의 데이터로 매핑합니다.

'CS > Java' 카테고리의 다른 글

Checked Exception과 Unchecked Exception에 대해 알아보자.  (0) 2024.03.22
Java 버전 특징 이해하기  (0) 2024.03.07
StringTokenizer  (1) 2023.03.17
자바에서 형 변환  (0) 2023.03.17
Java OpenJDK 11 설치  (0) 2023.03.01