programing

Java Enumeration과 반복자의 차이점

itsource 2022. 9. 24. 23:47
반응형

Java Enumeration과 반복자의 차이점

이들 2개의 인터페이스의 정확한 차이점은 무엇입니까?사용하는 것보다 장점이 있습니까?누구라도 자세한 내용을 알려주시면 참고문헌을 제공해주시면 감사하겠습니다.

인터페이스의 Java API 사양을 보면 간의 차이점을 알 수 있습니다.

반복자는 열거와 다음 두 가지 점에서 다릅니다.

  • 발신자는, 명확하게 정의된 시멘틱스를 사용해 반복중에, 기본 컬렉션으로부터 요소를 삭제할 수 있습니다.
  • 메서드 이름이 개선되었습니다.

둘 다입니다Enumeration ★★★★★★★★★★★★★★★★★」Iterator요소를 하지만, 「」는 「」입니다.Iterator을 줄임으로써 되었으며, 이 방법에는 '자잘못하다', '자잘못하다'가 되어 있습니다.remove하다

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

API한 바와 에서는 Java API가 'Java API" 또는 "Java API"입니다.IteratorEnumeration"Iterator는 Java 컬렉션 프레임워크에서 Enumeration을 대체합니다." (사양에서)

반복기는 fail-fast입니다.즉, 1개의 스레드가 추가/삭제 조작에 의해 컬렉션을 변경하고, 다른 스레드는 다음을 사용하여 반복기를 통과합니다.hasNext() or next()메서드, 반복기는 던짐으로써 빠르게 실패한다.ConcurrentModificationException반복기의 Fail-Fast 동작은 버그를 검출하는 데만 사용할 수 있습니다. 등의 .은, 「Fail-Fast」의 코드의 하는 것에 의해서 됩니다.이것은, 코드의 블록을 동기화하는 것에 의해서 실현됩니다.nextElement()이치노

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

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

메모: 이 인터페이스의 기능은 Iterator 인터페이스에 의해 복제됩니다.또한 Iterator는 선택적 제거 작업을 추가하며 메서드 이름이 더 짧습니다.새로운 구현에서는 열거형보다 반복형 사용을 고려해야 합니다.

사실은 하지 않은 것입니다.Iterator<T>요.Iterable<T>for(_type_ element:collection){...}★★★★★★ 。

Enumeration과 Iterator에는 기본적으로 세 가지 차이가 있습니다.

★★★
클래스 lagacy 클래스)에만됩니다.에만 사용합니다. Vector)

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

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

  • 퍼블릭 부울 hasNextElement();
  • 퍼블릭 오브젝트 nextElement();

반복기

  1. 모든 컬렉션에 적용할 수 있습니다.

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

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

    • 퍼블릭 부울 hasNext();
    • 퍼블릭 오브젝트 next();
    • 공용 무효 삭제();

양쪽 제한

  • 앞으로만 이동
  • 이 없습니다.Add object ★★★★★★★★★★★★★★★★★」Replace object

1) Iterator와 Enumeration의 주요 차이점은 컬렉션을 이동할 때 요소를 제거하는 것입니다.반복자는 remove() 메서드를 가지고 있기 때문에 수집 트래버설 중에 요소를 삭제할 수 있습니다.열거형에는 remove() 메서드가 없습니다.

2) 열거는 본질적으로 페일 세이프입니다.Concurrent Modification은 슬로우하지 않습니다.트래버설 중에 컬렉션이 수정된 경우 예외입니다.반복기는 본질적으로 실패 속도가 빠릅니다.Concurrent Modification이 느려집니다.자체 remove() 메서드 이외의 반복 중에 컬렉션이 변경된 경우 예외입니다.

3) Enumeration은 Vector, Hashtable을 통과하기 위해 사용되는 레거시 인터페이스입니다.반복기는 레거시 인터페이스가 아닙니다.반복기는 HashMap, LinkedList, ArrayList, HashSet, TreeMap, TreeSet의 트래버설에 사용할 수 있습니다.

자체 컬렉션 클래스를 작성하고 기존 클래스를 확장하거나 컬렉션 프레임워크 인터페이스를 구현하는 경우 기본적으로 반복기를 사용해야 합니다.

어떤 이유로 (생각할 수 없는) java.util과 관련이 없는 커스텀 컬렉션 클래스를 만들고 있는 경우.컬렉션 또는 java.util.어떤 식으로든 맵을 만들더라도 Itable을 구현해야 합니다.이것에 의해, 다른 사람이 루프를 위해서 클래스를 사용할 수 있습니다.

주된 차이점은 Enumeration does not exposure() 메서드입니다.또한 Iterator는 기본 개체에 대한 탐색과 수정을 동시에 수행할 수 없습니다.동시 수정 등이 있는지 여부를 확인할 수 있는 제어 기능이 있기 때문에 더 많은 처리가 필요합니다.따라서 Enumeration의 성능은 Iterator보다 사실상 50% 더 빠릅니다.이러한 동기화를 무시하는 탐색만 필요한 경우 Enumeration을 사용하십시오.

열거는 레거시 클래스(Vector, Stack...)에만 사용할 수 있으며 반복기는 모든 클래스에 사용할 수 있습니다.

데이터 취득에는 반복기와 열거기가 모두 사용되며, 벡터/스택과 같은 레거시 클래스에만 열거기를 사용할 수 있고 나머지 클래스에는 반복기를 사용할 수 있습니다.열거는 맵의 키 세트에도 사용할 수 있습니다.

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

반응형