posted by By훈트 2011.01.27 18:18

출처 : http://penta82.egloos.com/4099869

 

JCF(Java Collection Framework)에서 많이 사용되었던 Hashtable에 대해서 살펴보자.

Hashtable은 JDK 1.2이전부터 존재해 왔던 클래스이다. 많은 사람들이 의문인 것은 왜 HashTable이 아니냐는 것인데 여기서는 그냥 넘어가자. 클래스명이야 소스 개발자의 몫이니까.

Hashtable의 중요 메소드를 살펴보면,

  • void clear()
    • 모든 키와 값을 제거한다.
  • boolean contains(Object value), containsValue(Object value)
    • 주어진 객체에 대응하는 키 값이 있는지 알려준다.
  • boolean containsKey(Object key)
    • 주어진 키 값이 있는지 알려준다.
  • Enumeration keys()
    • 해시 테이블의 키 값들을 돌려준다.
  • Enumeration elements()
    • 해시 테이블에 저장된 객체들을 돌려준다.
  • Object get(Object key)
    • 주어진 키에 대응하는 값을 돌려준다.
  • Object put(Object key, Object value)
    • 키와 대응하는 값을 저장한다.
  • Object remove(Object key)
    • 키의 대응 관계(Mapping)을 제거한다.
  • int size()
    • 해시 테이블의 대응 관계(Mapping)의 개수를 돌려준다.

여기서 'Enumeration이 무엇인가?' 하는 궁금증이 있을 것이다. Enumeration은 단순히 객체들의 목록을 가지고 있는 구조체라고 생각하면 된다. Enumeration클래스의 메소드를 보면

  • boolean hasMoreElements()
    • 더 이상의 요소가 있는지 알려준다.
  • nextElements()
    • 다음 요소를 돌려준다. 만약 없다면, NoSuchElementException 예외를 발생한다.

따라서 위의 두 메소드를 사용하면 for문, while문을 이용하지 않고도 key값과 element값에 접근할 수 있다.

이제 관련 소스를 살펴보자.

public class HashtableExam2 {
    
    public static void main(String[] args) {
        Hashtable htable = new Hashtable(10);
        
        // put(Object key, Object value)메소드
        htable.put("java", "프로그래밍 언어");
        htable.put("bible", "성서, 성경, 성전");
        htable.put("star", "별, 항성");
        htable.put("moon", "달");
        
        // contains(Object value);
        if(htable.contains("프로그래밍 언어")) {
            System.out.println("value : \"프로그래밍 언어\" 존재");
        }else{
            System.out.println("value : \"프로그래밍 언어\" 존재하지 않음");
        }    
        
        if(htable.contains("음악")) {
            System.out.println("value : \"음악\" 존재");
        }else{
            System.out.println("value : \"음악\" 존재하지 않음");
        }
        
        // containsValue(Object value)
        if(htable.containsValue("프로그래밍 언어")) {
            System.out.println("value : \"프로그래밍 언어\" 존재");
        }else{
            System.out.println("value : \"프로그래밍 언어\" 존재하지 않음");
        }
        
        if(htable.containsValue("음악")) {
            System.out.println("value : \"음악\" 존재");
        }else{
            System.out.println("value : \"음악\" 존재하지 않음");
        }
        
        // containsKey(Object key)
        if(htable.containsKey("java")) {
            System.out.println("key : \"java\" 존재");
        }else{
            System.out.println("key : \"java\" 존재하지 않음");
        }
        
        if(htable.containsValue("ruby")) {
            System.out.println("key : \"ruby\" 존재");
        }else{
            System.out.println("key : \"ruby\" 존재하지 않음");
        }
        
        // get(Object key)
        String value = (String)htable.get("java");
        System.out.println("java(key) : " + value + "(value)");
        
        // remove(Object key)
        htable.remove("star");
        
        // Enumeration 사용
        Enumeration e = htable.keys();
        String key, val;
        while(e.hasMoreElements()) {
            key = (String)e.nextElement();
            val = (String)htable.get(key);
            System.out.println("[" + key + "] " + val);
        }
        
        // clear()
        htable.clear();
        
        // size()
        System.out.println("htable의 size : " + htable.size());
    }

}
저작자 표시
신고
크리에이티브 커먼즈 라이선스
Creative Commons License

티스토리 툴바