IT

Java Enumeration과 Iterator의 차이점

lottoking 2020. 7. 22. 07:46
반응형

Java Enumeration과 Iterator의 차이점


이 두 인터페이스의 차이점은 무엇입니까? ? 를 사용하는 것보다 훨씬 많은 것 입니까? 누구든지 정교하게 만들 수있는 권한 참조 기사를 주시면 감사하겠습니다.EnumerationIterator


Iterator인터페이스 의 Java API 스펙을 보면 다음 과 같은 차이점에 대한 설명이 있습니다 .Enumeration

반복자는 두 가지에서 열거와 나열합니다.

  • 반복자는 호출자가 잘 정의 된 의미론으로 반복하는 동안 기본 수집에서 요소를 제거 할 수 있습니다.
  • 분석법 이름이 향상되었습니다.

결론은, 모두 EnumerationIterator연속적인 요소를 제공하지만, Iterator메소드 이름은 짧은 그래서 같은 방식으로 개선하고, 추가 로이 remove방법을 제공합니다. 단계별 비교는 다음과 가변적입니다.

  Enumeration                     Iterator
  ----------------                ----------------
  hasMoreElement()                hasNext()
  nextElement()                   next()
  N/A                             remove()

Java API 사양에서 언급했듯이 "Iterator는 Java 컬렉션 프레임 워크에서 열거를 대신합니다." 보다 최신 프로그램의 경우 더 Iterator선호 Enumeration합니다. ( 사양에서)Iterator


반복자는 빠르다 . 즉, 하나의 단일가 추가 / 제거하는 경우에 컬렉션을 변경하는 경우 다른 작업이 hasNext() or next()메서드 를 사용하여 Iterator를 통해이를 순번을 순회하는 동안 이터레이터는 더 빨리 실패합니다 ConcurrentModificationException. 반복자의 빠른 동작은 버그를 발견하는 데만 사용할 수 있습니다. Hashtable, Vector와 같은 클래스의 메소드가 리턴 한 열거는 많은 nextElement()시간이 존재하는 현재 Vector 오브젝트를 잠그는 메소드 내에서 코드 블록을 동기화하여 달성 할 수 있습니다.


"공식적으로", 추가 작업 (예 : 제거)을 지원하는 반복자 인터페이스와 유사해야합니다. 일반적으로 반복적으로 사용하는 경향이 있습니다.

다음은 열거 형 인터페이스 javadocs 에서 것 것입니다 .

참고 :이 인터페이스의 기능은 Iterator 인터페이스에 의해 복제됩니다. 또한 Iterator는 제거 작업을 추가하고 메소드 이름이 더 짧습니다. 새로운 구현에서는 열거 된 자보다 반복적으로 사용하는 것이 좋습니다.


의 간단한 사실 하나이지만 이전 답변에서 언급되지 않은 [해석] 구조 해석에 Iterator<T>사용되는을 구석으로입니다 .Iterable<T>for(_type_ element:collection){...}


열거와 반복자에는 기본적인 세 가지 차이점이 있습니다.

열거
1 만 lagacy 클래스의 사용 (예. Vector)

    Enumeration e = v.elements();  
    v is the object of `Vector` class

2. 읽기 작업을 수행 할 수있는 요소를 제거 할 수 없습니다.
3. 두 가지 방법을 사용할 수 있습니다.

  • 공개 부울 hasNextElement ();
  • 공개 객체 nextElement ();

반복자

  1. 모든 컬렉션에 적용 가능

    Iterator itr = c.iterator();  
    where c is any `Collection` class
    
  2. 읽기 및 제거 작업을 수행 할 수 있습니다.

  3. 세 가지 방법을 사용할 수 있습니다.

    • 공개 부울 hasNext ();
    • 공개 객체 next ();
    • 공공 무효 제거 ();

둘 다의 한계

  • 앞으로 만 이동
  • 이 없음에 대한 방법 Add object및 없다Replace object

자체 컬렉션 클래스를 확장하거나 기존 클래스를 확장하거나 프레임 워크 인터페이스를 구현하는 경우 기본적으로 Iterator를 사용할 수 없습니다.

어떤 이유로 (내가 생각할 수없는) 어떤 방법으로 java.util.Collection으로 또는 java.util.Map 관련되지 않는 사용자 지정 컬렉션 클래스를 만드는, 당신이해야에 대한 경우에는 여전히 사람들이 사용할 수 있도록의 Iterable을 구현 for 루프의 클래스.


주요 차이점은 Enumeration이 remove () 메서드를 노출하지 않는다는 것입니다. 또한 Iterator는 기본 개체에 대한 탐색 및 수정을 동시에 허용하지 않습니다. 동시 수정 여부를 확인하는 제어 기능이 있으므로 더 많은 처리가 필요합니다. 따라서 Enumeration의 성능은 Iterator보다 거의 50 % 빠릅니다. 이러한 동기화를 무시하고 탐색 만 필요하면 열거 형을 사용하십시오.


Enumeration은 레거시 클래스 (Vector, Stack ...)에만 사용할 수 있으며 Iterator는 모두 사용할 수 있습니다.


반복기와 열거는 모두 데이터를 검색하는 데 사용됩니다. 차이점은 열거는 레거시 클래스, 즉 벡터 / 스택에만 사용할 수있는 반면 반복기는 나머지에 사용할 수 있다는 것입니다. 열거 형은 맵의 키 세트에도 사용할 수 있습니다.

참고 URL : https://stackoverflow.com/questions/948194/difference-between-java-enumeration-and-iterator

반응형