Enumeration 과 Iterator 소개

8822 단어
Enumeration
Enumeration 소개
       Enumeration (열거) 은 그 자체 가 인터페이스 이지 클래스 가 아 닙 니 다.Enumeration 인터페이스 자 체 는 데이터 구조 가 아 닙 니 다.그러나 다른 데이터 구조 에 매우 중요 하 다.Enumeration 인 터 페 이 스 는 하나의 데이터 구조 에서 연속 적 인 데 이 터 를 얻 는 수단 을 정의 합 니 다.Enumeration 인 터 페 이 스 를 실현 하 는 대상 은 일련의 요 소 를 생 성하 고 한 번 에 하 나 를 생 성 합 니 다.nextElement 방법 을 연속 으로 호출 하면 일련의 연속 요 소 를 되 돌려 줍 니 다.
       예 를 들 어 Vector v 의 모든 요 소 를 출력 하려 면 다음 과 같은 방법 을 사용 할 수 있 습 니 다.
 for (Enumeration e = v.elements(); e.hasMoreElements();){
     System.out.println(e.nextElement());
 }

Enumeration 방법 소개
       Enumeration 인 터 페 이 스 는 주로 벡터 요소, 해시 표 의 키 와 해시 표 의 값 을 통 해 매 거 진 표준 방법 을 제공 합 니 다.Enumeration 은 하나의 인터페이스 이기 때문에 그의 역할 은 데이터 구조 에 방법 협 의 를 제공 하 는 데 국한 되 고 이 인 터 페 이 스 를 실현 하 는 대상 은 일련의 요소 로 구성 되 며 nextElement () 방법 을 연속 적 으로 호출 하여 Enumeration 매 거 진 대상 중의 요 소 를 얻 을 수 있다.Enumeration 인터페이스 에는 다음 두 가지 방법 만 정의 되 어 있 습 니 다.
  • boolean hasMoreElements()

  • 이 열 거 는 더 많은 요 소 를 포함 하고 있 는 지 테스트 합 니 다.
    반환 값: 이 매개 대상 이 최소한 제공 할 수 있 는 요 소 를 포함 하고 있 을 때 만 true 로 돌아 갑 니 다.그렇지 않 으 면 false 로 돌아 갑 니 다.
  • E nextElement () 이 매 거 진 대상 에 최소한 제공 할 수 있 는 요소 가 있다 면 이 매 거 진 다음 요 소 를 되 돌려 줍 니 다.반환 값: 이 열 거 된 다음 요소 입 니 다.던 지기: NoSuchElement Exception - 더 많은 요소 가 존재 하지 않 는 다 면.

  • 열거 코드 예시
  • Enumeration 을 사용 하여 벡터 집합
  •   import java.util.Enumeration;
      import java.util.Vector;  
      
      public class EnumerationTest {
            public static void main(String[] args) {
            
                Vector vector = new Vector();
                vector.addElement("Monday");
                vector.addElement("Tuesday");
                vector.addElement("Wednesday");
                vector.addElement("Thursday");
                
                Enumeration elements = vector.elements();
                while (elements.hasMoreElements()) {
                    System.out.println(elements.nextElement());
                }
            }
    }
    

    출력 결과:
    Monday
    Tuesday
    Wednesday
    Thursday
    
  • Enumeration 을 사용 하여 HashTable (매 거 진 키 값 가 져 오기)
  •    import java.util.Enumeration;
       import java.util.Hashtable;  
         
       public class EnumerationTest {
           public static void main(String[] args) {
    
                Hashtable table = new Hashtable();
                table.put("   ", "Monday");
                table.put("   ", "Tuesday");
                table.put("   ", "Wednesday");
                table.put("   ", "Thursday");
                
                Enumeration keys = table.keys();
                while (keys.hasMoreElements()) {
                    String element= keys.nextElement();
                    System.out.println(element);
                }
            }
        }
    

    출력 결과:
       
       
       
       
    
  • HashTable 을 사용 하여 열거 (매 거 진 값 가 져 오기)
  •    import java.util.Enumeration;
       import java.util.Hashtable;  
         
       public class EnumerationTest {
           public static void main(String[] args) {
    
                Hashtable table = new Hashtable();
                table.put("   ", "Monday");
                table.put("   ", "Tuesday");
                table.put("   ", "Wednesday");
                table.put("   ", "Thursday");
                
                Enumeration values= table.elements();
                while (values.hasMoreElements()) {
                    String element= values.nextElement();
                    System.out.println(element);
                }
            }
        }
    

    출력 결과:
    Wednesday
    Tuesday
    Thursday
    Monday
    

    Iterator
    Iterator 소개
           Iterator (교체 기) 는 자바 Collections Framework (자바 집합 프레임 워 크) 의 Enumeration 을 대체 하 였 으 며, 교체 기 는 매 거 진 것 과 두 가지 차이 가 있 습 니 다.
  • 교체 기 는 호출 자가 정 의 된 좋 은 의 미 를 이용 하여 교체 기간 에 교체 기 가 가리 키 는 collection 에서 요 소 를 제거 할 수 있 도록 합 니 다.
  • 방법의 명칭 이 개선 되 었 다.

  • Iterator 방법 소개:
  • boolean hasNext()

  • 교체 할 수 있 는 요소 가 있다 면 트 루 로 돌아 갑 니 다.(다시 말 하면 next 가 이상 을 던 지지 않 고 요 소 를 되 돌려 주면 true 로 돌아 갑 니 다).
       :           ,    true。
    
  • E next () 는 교 체 된 다음 요 소 를 되 돌려 줍 니 다.반환 값: 교 체 된 다음 요소 입 니 다.던 지기: NoSuchElement Exception - 교체 할 수 있 는 요소 가 없습니다.
  • void remove()

  • 교체 기 가 가리 키 는 collection 에서 교체 기 가 돌아 오 는 마지막 요 소 를 제거 합 니 다 (선택 가능 한 동작).매번 next 를 호출 할 때마다 이 방법 을 한 번 만 호출 할 수 있 습 니 다.교체 할 때 이 방법 이외 의 다른 방식 으로 이 교체 기 가 가리 키 는 collection 을 수정 하면 교체 기의 행 위 는 불확실 하 다.
    던 지기:
  • Unsupported Operation Exception - 교체 기 가 reove 작업 을 지원 하지 않 으 면.
  • IllegalState Exception - next 방법 이 호출 되 지 않 았 거나, 지난번 next 방법 을 호출 한 후에 reove 방법 을 호출 하 였 습 니 다.

  • Iterator 코드 예
           Iterator 를 사용 하여 list 단일 열 집합 을 옮 겨 다 니 며, map 다 열 집합 에 대해 서 는 keyset () 방법 이나 entry Set () 방법 을 호출 한 후에 도 단일 열 집합 에 해당 합 니 다.
    import java.util.ArrayList;
    import java.util.Iterator;
    import java.util.List;
    
    public class IteratorTest {
    
        public static void main(String[] args) {
            
            List list = new ArrayList();
            list.add("Monday");
            list.add("Tuesday");
            list.add("Wednesday");
            
            Iterator iterator = list.iterator();
            while (iterator.hasNext()) {
                System.out.println(iterator.next());
            }
        }
    }
    

    출력 결 과 는:
    Monday
    Tuesday
    Wednesday
    

    Iterator 의 reove () 방법 호출:
    import java.util.ArrayList;
    import java.util.Iterator;
    import java.util.List;
    
    public class IteratorTest {
    
        public static void main(String[] args) {
            
            List list = new ArrayList();
            list.add("Monday");
            list.add("Tuesday");
            list.add("Wednesday");
            
            Iterator iterator = list.iterator();
            while (iterator.hasNext()) {
                if ("Wednesday".equals(iterator.next())) {
                    iterator.remove();
                }
                System.out.println(list);
            }
        }
    }
    

    출력 결과:
    [Monday, Tuesday, Wednesday]
    [Monday, Tuesday, Wednesday]
    [Monday, Tuesday]
    

    주의: 매번 순환 할 때마다 next () 방법 을 한 번 만 사용 하 는 것 이 좋 습 니 다. 한 번 사용 하면 지침 이 하나 아래로 내 려 갑 니 다. 한 순환 에서 next () 방법 을 두 번 사용 하면 NoSuchElement Exception 의 이상 이 발생 할 수 있 습 니 다. 예 를 들 어:
    import java.util.ArrayList;
    import java.util.Iterator;
    import java.util.List;
    
    public class IteratorTest {
    
        public static void main(String[] args) {
            
            List list = new ArrayList();
            list.add("Monday");
            list.add("Tuesday");
            list.add("Wednesday");
            
            Iterator iterator = list.iterator();
            while (iterator.hasNext()) {
                if (iterator.next() != null && !"".equals(iterator.next())) {
                    //     
                }
            }
        }
    }
    

    위의 코드 는 한 번 순환 하고 포인터 가 두 자 리 를 뒤로 이동 합 니 다. 이렇게 두 번 째 순환 할 때 두 번 째 iterator. next () 는 이상 하 게 던 집 니 다.
    마찬가지 로 reove () 방법 에 주의해 야 합 니 다. 매번 호출 할 때마다 next () 방법 을 호출 한 전제 에서 만 응답 요 소 를 제거 할 수 있 습 니 다.여러 next () 방법 을 호출 한 후 reove () 방법 을 호출 하면 제거 할 때 마지막 으로 next () 방법 으로 돌아 오 는 요 소 를 호출 합 니 다.예 를 들 면:
    import java.util.ArrayList;
    import java.util.Iterator;
    import java.util.List;
    
    public class IteratorTest {
    
        public static void main(String[] args) {
            
            List list = new ArrayList();
            list.add("Monday");
            list.add("Tuesday");
            list.add("Wednesday");
            list.add("Thursday");
            
            Iterator iterator = list.iterator();
            while (iterator.hasNext()) {
                if (iterator.next() != null && !"".equals(iterator.next())) {
                    iterator.remove();
                }
                System.out.println(list);
            }
        }
    }
    

    출력 결과:
    [Monday, Wednesday, Thursday]
    [Monday, Wednesday]
    

    총결산
    Enumeration 인 터 페 이 스 는 JDK 1.0 때 출시 된 것 으로 JDK 1.5 이후 Enumeration 인 터 페 이 스 를 확장 해 범용 애플 리 케 이 션 을 추가 했다.Iterator 교체 기 는 Enumeration 의 기능 을 대체 하 는 동시에 요 소 를 삭제 하 는 방법 을 추가 하고 방법의 이름 을 개선 했다.Enumeration 을 왜 써 요?자바 의 발전 이 오 랜 시간 이 걸 렸 기 때문에 일부 오래된 시스템 이나 라 이브 러 리 의 방법 은 Enumeration 인 터 페 이 스 를 사용 하고 있 기 때문에 호 환 을 위해 서 는 Enumeration 을 사용 해 야 합 니 다.이미 알 고 있 는 vactor 와 hashtable 의 스 트 리밍 은 Enumeration 을 사용 할 수 있 습 니 다.

    좋은 웹페이지 즐겨찾기