Java Enumeration과 Iterator의 차이점
이 두 인터페이스의 차이점은 무엇입니까? ? 를 사용하는 것보다 훨씬 많은 것 입니까? 누구든지 정교하게 만들 수있는 권한 참조 기사를 주시면 감사하겠습니다.Enumeration
Iterator
Iterator
인터페이스 의 Java API 스펙을 보면 다음 과 같은 차이점에 대한 설명이 있습니다 .Enumeration
반복자는 두 가지에서 열거와 나열합니다.
- 반복자는 호출자가 잘 정의 된 의미론으로 반복하는 동안 기본 수집에서 요소를 제거 할 수 있습니다.
- 분석법 이름이 향상되었습니다.
결론은, 모두 Enumeration
와 Iterator
연속적인 요소를 제공하지만, 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 ();
반복자
모든 컬렉션에 적용 가능
Iterator itr = c.iterator(); where c is any `Collection` class
읽기 및 제거 작업을 수행 할 수 있습니다.
세 가지 방법을 사용할 수 있습니다.
- 공개 부울 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
'IT' 카테고리의 다른 글
데이터베이스 ID 노출-보안 위험? (0) | 2020.07.22 |
---|---|
DataFrame의 파티셔닝을 정의하는 방법은 무엇입니까? (0) | 2020.07.22 |
메모장에서 컬러로 텍스트 복사하기 ++ (0) | 2020.07.22 |
jquery ajax와 함께 ASP.NET MVC 유효성 검사를 사용 하시겠습니까? (0) | 2020.07.22 |
C # 대 Java 제네릭 (0) | 2020.07.22 |