SSISO Community

시소당

열거자를 이용한 Vector와 Hashtable 검색

객체저장을 위한 클래스들을 이용할 때 검색을 용이하게 하기 위한 목적으로 열거자를 사용합니다. 열거자 인터페이스는 정말 별 것 없습니다. 데이터를 순서대로 추출할 수 있는 메서드 이외에는 전혀 포함하고 있는 것이 없습니다. 그것도 몇 개 되지도 않습니다. 열거자의 대표적인 인터페이스는 Enumeration과 Iterator가 그 대표적인 열거자입니다.

 

    Iterator 인터페이스의 멤버 메서드

n        boolean hasNext ()

다음 요소가 있는지 없는지 확인하는 메서드입니다. 있다면 true, 없다면 false입니다.

n        Object  next ()

요소가 남아 있는 경우는, 다음 요소를 얻어내는 역할을 합니다.

n        void remove ()

             반복자에 의해 마지막에 돌려주어진 요소를 삭제합니다

   

Enumeration 인터페이스 멤버메서드

n        boolean hasMoreElements ()

다음 요소가 있는지 없는지 확인하는 메서드입니다. 있다면 true, 없다면 false입니다.

n        Object  nextElement ()

 요소가 남아 있는 경우는, 다음 요소를 얻어내는 역할을 합니다.

 

Iterator와 Enumeration은 똑같은 역할을 하는 인터페이스입니다. 하지만, Enumeration이 이름이 길다는 문제점 때문에 Iterator를 1.2버전에서 만들었다고 합니다. 그런데 보통의 프로그래머들은 1.0버전에서 사용하던 Enumeration을 더 많이 사용하는 것 같습니다. 여하튼 두 인터페이스는 똑 같은 역할을 합니다.

 

Iterator와 Enumeration은 인터페이스이기 때문에 스스로는 클래스를 생성할 수 없습니다. 물론, 여러분이 구현을 한다면 어쩔 수 없겠지요. 보통의 경우에는 Iterator와 Enumeration을 Vector와 Hashtable등에서 메서드를 이용하여 return받는 형식으로 사용합니다. 다음은 그 예를 보여 주고 있습니다.

 

n        만약 객체가 들어 있는 Hashtable h가 있다면

Enumeration eh = h.elements();

n        만약 객체가 들어있는 Vector v가 있다면

Enumeration ev = v.elements();

 

다음은 Hashtable에서 Iterator를 얻어내는 방법을 보여 주고 있습니다.

 

n        만약 객체가 들어 있는 Hashtable h가 있다면

Iterator ih = h.values().iterator();

 

지금까지 논의한 Enumeration과 Iterator에 관련된 예제는 아래와 같습니다.

 

EnumTest.java

import java.util.*;

public class EnumTest {

             public static void main(String[] args) {

                           Vector v = new Vector();

                           //1. 벡터객체에 데이터4개 삽입

                           v.addElement(new String("망아지"));

                           v.addElement(new String("송아지"));

                           v.addElement(new String("강아지"));

                           v.addElement(new String("병아리"));

                           Hashtable h = new Hashtable();

                           //1. 해시테이블에 객체의 삽입

                           h.put("1", new String("홍길동"));

                           h.put("2", new String("안녕하세요"));

                           h.put("3", new String("02-1111-2222"));

                           h.put("4", new String("017-777-9999"));

                           Enumeration ev = v.elements();

                           while(ev.hasMoreElements()){

                                        String temp = (String)ev.nextElement();

                                        System.out.println("벡터의 Enumeration:" + temp);

                           }

                           System.out.println();

                           Enumeration ei = h.elements();

                           while(ei.hasMoreElements()){

                                        String temp = (String)ei.nextElement();

                                        System.out.println("해시의 Enumeration:" + temp);

                           }

                           System.out.println();

                           Iterator ih = h.values().iterator();

                           while(ih.hasNext()){

                                        String temp = (String)ih.next();

                                        System.out.println("해시의 Iterator:" + temp);

                           }

             }

}

C:\examples\6. Array>javac EnumTest.java

C:\examples\6. Array>java EnumTest

벡터의 Enumeration:망아지

벡터의 Enumeration:송아지

벡터의 Enumeration:강아지

벡터의 Enumeration:병아리

 

해시의 Enumeration:017-777-9999

해시의 Enumeration:02-1111-2222

해시의 Enumeration:안녕하세요

해시의 Enumeration:홍길동

 

해시의 Iterator:017-777-9999

해시의 Iterator:02-1111-2222

해시의 Iterator:안녕하세요

해시의 Iterator:홍길동

 

출처: www.jabook.org

1095 view

4.0 stars