ISpliterator 인터페이스
정의
중요
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
원본의 요소를 트래버스 및 분할하기 위한 개체입니다.
[Android.Runtime.Register("java/util/Spliterator", "", "Java.Util.ISpliteratorInvoker", ApiSince=24)]
[Java.Interop.JavaTypeParameters(new System.String[] { "T" })]
public interface ISpliterator : Android.Runtime.IJavaObject, IDisposable, Java.Interop.IJavaPeerable
[<Android.Runtime.Register("java/util/Spliterator", "", "Java.Util.ISpliteratorInvoker", ApiSince=24)>]
[<Java.Interop.JavaTypeParameters(new System.String[] { "T" })>]
type ISpliterator = interface
interface IJavaObject
interface IDisposable
interface IJavaPeerable
- 파생
- 특성
- 구현
설명
원본의 요소를 트래버스 및 분할하기 위한 개체입니다. Spliterator에서 다루는 요소의 원본은 배열, Collection
IO 채널 또는 생성기 함수와 같은 것일 수 있습니다.
분할자는 요소를 개별적으로(#tryAdvance tryAdvance()
) 또는 순차적으로 대량(#forEachRemaining forEachRemaining()
)으로 트래버스할 수 있습니다.
또한 분할기는 병렬 작업에 사용할 수 있도록 일부 요소를 다른 분할기로 분할(사용 #trySplit
)할 수도 있습니다. 분할할 수 없거나 매우 불균형하거나 비효율적인 방식으로 분할할 수 없는 Spliterator를 사용하는 작업은 병렬 처리의 이점을 얻을 수 없습니다. 통과 및 배기 요소 분할; 각 분할기는 단일 대량 계산에만 유용합니다.
또한 Spliterator는 , ,, , 및 사이에서 #SORTED
#NONNULL
#CONCURRENT
#ORDERED
#DISTINCT
#SIZED
#IMMUTABLE
구조, 원본 및 #SUBSIZED
요소 집합 #characteristics()
을 보고합니다. 분할자 클라이언트에서 계산을 제어, 특수화 또는 간소화하는 데 사용할 수 있습니다. 예를 들어 would 보고서에 대한 Collection
Spliterator, 보고 SIZED
할 보고서에 대한 Set
DISTINCT
분할자, 보고할 보고서에 대한 SortedSet
분할자도 있습니다 SORTED
. 특성은 단순 통합 비트 집합으로 보고됩니다.
일부 특성은 메서드 동작을 추가로 제한합니다. 예를 들어 ORDERED
순회 메서드는 문서화된 순서를 따라야 합니다. 나중에 새 특성을 정의할 수 있으므로 구현자는 목록에 없는 값에 의미를 할당해서는 안 됩니다.
"binding">c IMMUTABLE</c>> 또는 <c>CONCURRENT</c>를 보고<하지 않는 분할자는 분할기가 <>요소 원본에 바인딩/em>을 바인딩<할 때 및 바인딩 후 검색된 요소 원본의 구조적 간섭 감지와 관련된 문서화된 정책을 포함해야 합니다. <em>late-binding</em> Spliterator는 Spliterator가 생성될 때가 아니라 예상 크기에 대한 첫 번째 순회, 첫 번째 분할 또는 첫 번째 쿼리의 지점에서 요소의 원본에 바인딩됩니다. 지연 바인딩</em>이 아닌 <>스플리터레이터는 생성 시점 또는 메서드의 첫 번째 호출에 있는 요소의 원본에 바인딩됩니다. 분할기가 트래버스될 때 바인딩하기 전에 원본을 수정한 내용이 반영됩니다. 분할기를 바인딩한 후에는 구조적 간섭이 감지되면 최상의 노력으로 throw ConcurrentModificationException
해야 합니다. 이 작업을 수행하는 분할기를 em fail-fast</em이라고 합니다.<>> 스플리터레이터의 대량 순회 방법(#forEachRemaining forEachRemaining()
)은 요소별로 확인하고 즉시 실패하는 대신 모든 요소가 트래버스된 후 순회를 최적화하고 구조적 간섭을 확인할 수 있습니다.
스플리터레이터는 메서드를 통해 #estimateSize
나머지 요소의 수를 예측할 수 있습니다. 특성 #SIZED
에 반영된 것처럼 이 값은 성공적인 순회에서 발생할 요소 수에 정확히 해당합니다. 그러나 정확히 알려지지 않은 경우에도 예상 값은 더 분할하거나 나머지 요소를 순차적으로 트래버스하는 것이 바람직한지 여부를 결정하는 것과 같이 원본에서 수행되는 작업에 여전히 유용할 수 있습니다.
병렬 알고리즘의 명백한 유틸리티에도 불구하고 분할기는 스레드로부터 안전하지 않을 것으로 예상됩니다. 대신 분할기를 사용하는 병렬 알고리즘을 구현하면 분할기가 한 번에 하나의 스레드에서만 사용되도록 해야 합니다. 이는 일반적으로 직>렬 스레드 제한</em>을 통해 <쉽게 얻을 수 있으며, 이는 재귀 분해에서 작동하는 일반적인 병렬 알고리즘의 자연스러운 결과입니다. 스레드 호출 #trySplit()
은 반환된 Spliterator를 다른 스레드로 넘겨줄 수 있으며, 이 스레드는 해당 Spliterator를 트래버스하거나 추가로 분할할 수 있습니다. 두 개 이상의 스레드가 동일한 분할기에서 동시에 작동하는 경우 분할 및 순회 동작은 정의되지 않습니다. 원래 스레드가 처리를 위해 스플리터레이터를 다른 스레드로 #tryAdvance(Consumer) tryAdvance()
넘겨주는 경우 특정 보장(예: 스플리터레이터의 #estimateSize()
SIZED
정확도)은 통과가 시작되기 전에만 유효하기 때문에 요소가 사용되기 전에 해당 핸드오프가 발생하는 것이 가장 좋습니다.
기본 하위 형식 특수화 Spliterator
는 , OfLong long
및 OfDouble double
값에 대해 OfInt int
제공됩니다. 해당 래퍼 클래스의 Spliterator#tryAdvance(java.util.function.Consumer)
인스턴스에 대한 기본값 및 Spliterator#forEachRemaining(java.util.function.Consumer)
상자 기본값의 하위 형식 기본 구현입니다. 이러한 권투는 기본 특수화를 사용하여 얻은 성능 이점을 훼손할 수 있습니다. boxing을 방지하려면 해당 기본 기반 메서드를 사용해야 합니다. 예를 들어 기본 Spliterator.OfInt#tryAdvance(java.util.function.IntConsumer)
설정 Spliterator.OfInt#tryAdvance(java.util.function.Consumer)
에서 Spliterator.OfInt#forEachRemaining(java.util.function.IntConsumer)
사용되어야 합니다Spliterator.OfInt#forEachRemaining(java.util.function.Consumer)
. boxing 기반 메서드 #tryAdvance tryAdvance()
를 사용하여 기본 값을 트래버스하며 #forEachRemaining(java.util.function.Consumer) forEachRemaining()
, 상자가 지정된 값으로 변환된 값이 발생하는 순서에는 영향을 주지 않습니다.
1.8에 추가되었습니다.
에 대한 java.util.Spliterator
Java 설명서
이 페이지의 일부는 Android 오픈 소스 프로젝트에서 만들고 공유하고 Creative Commons 2.5 특성 라이선스에 설명된 용어에 따라 사용되는 작업을 기반으로 하는 수정 사항입니다.
속성
Comparator |
이 Spliterator의 원본이 |
ExactSizeIfKnown |
이 Spliterator가 다른 경우 반환 |
Handle |
기본 Android 개체의 JNI 값을 가져옵니다. (다음에서 상속됨 IJavaObject) |
JniIdentityHashCode |
래핑된 인스턴스의 |
JniManagedPeerState |
관리되는 피어의 상태입니다. (다음에서 상속됨 IJavaPeerable) |
JniPeerMembers |
멤버 액세스 및 호출 지원. (다음에서 상속됨 IJavaPeerable) |
PeerReference |
JniObjectReference 래핑된 Java 개체 인스턴스의 값을 반환합니다. (다음에서 상속됨 IJavaPeerable) |
메서드
Characteristics() |
이 Spliterator 및 해당 요소의 특성 집합을 반환합니다. |
Disposed() |
인스턴스가 삭제되었을 때 호출됩니다. (다음에서 상속됨 IJavaPeerable) |
DisposeUnlessReferenced() |
이 인스턴스에 대한 미해결 참조가 없으면 호출 |
EstimateSize() |
순회에서 발생할 요소 수의 추정값을 |
Finalized() |
인스턴스가 종료될 때 호출됩니다. (다음에서 상속됨 IJavaPeerable) |
ForEachRemaining(IConsumer) |
모든 요소가 처리되거나 작업이 예외를 throw할 때까지 나머지 각 요소에 대해 지정된 작업을 현재 스레드에서 순차적으로 수행합니다. |
HasCharacteristics(Int32) |
이 Spliterator의 |
SetJniIdentityHashCode(Int32) |
에서 반환 |
SetJniManagedPeerState(JniManagedPeerStates) |
원본의 요소를 트래버스 및 분할하기 위한 개체입니다. (다음에서 상속됨 IJavaPeerable) |
SetPeerReference(JniObjectReference) |
에서 반환 |
TryAdvance(IConsumer) |
나머지 요소가 있으면 지정된 동작을 수행하고 반환합니다. |
TrySplit() |
이 분할자를 분할할 수 있는 경우 요소를 포함하는 Spliterator를 반환합니다. 이 메서드에서 반환될 때는 이 Spliterator에서 다루지 않습니다. |
UnregisterFromRuntime() |
런타임이 이후 Java.Interop.JniRuntime+JniValueManager.PeekValue 호출에서 반환되지 않도록 이 인스턴스의 등록을 취소합니다. (다음에서 상속됨 IJavaPeerable) |
확장 메서드
JavaCast<TResult>(IJavaObject) |
Android 런타임 확인 형식 변환을 수행합니다. |
JavaCast<TResult>(IJavaObject) |
원본의 요소를 트래버스 및 분할하기 위한 개체입니다. |
GetJniTypeName(IJavaPeerable) |
원본의 요소를 트래버스 및 분할하기 위한 개체입니다. |