Share via


ISpliterator 인터페이스

정의

원본의 요소를 트래버스하고 분할하기 위한 개체입니다.

[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())으로 트래버스할 수 있습니다.

또한 Spliterator는 병렬 작업에 사용할 수 있도록 일부 요소를 다른 Spliterator로 분할할 수도 있습니다(사용 #trySplit). 분할할 수 없거나 매우 불균형하거나 비효율적인 방식으로 분할할 수 없는 분할기를 사용하는 작업은 병렬 처리의 이점을 얻을 가능성이 낮습니다. 통과 및 배기 요소 분할; 각 분할기는 단일 대량 계산에만 유용합니다.

또한 Spliterator는 , , #SIZED#IMMUTABLE#SORTED#NONNULL#DISTINCT#CONCURRENT, 및 간의 #ORDERED구조, 원본 및 요소 집합 #characteristics() 을 보고합니다.#SUBSIZED 분할기 클라이언트에서 계산을 제어, 특수화 또는 단순화하기 위해 사용할 수 있습니다. 예를 들어 의 Spliterator Collection 는 를 보고 SIZED하고, 에 대한 Set Spliterator는 를 보고 DISTINCT하고, 에 대한 SortedSet Spliterator도 를 보고 SORTED합니다. 특성은 간단한 통합 비트 집합으로 보고됩니다.

일부 특성은 메서드 동작을 추가로 제한합니다. 예를 들어 이면 ORDERED순회 메서드가 문서화된 순서를 따라야 합니다. 새 특성은 나중에 정의될 수 있으므로 구현자는 목록에 없는 값에 의미를 할당해서는 안 됩니다.

"binding">c IMMUTABLE</c> 또는 <c>>CONCURRENT</c>를 보고<하지 않는 분할기에는 분할기가 <>요소 원본에 바인딩/em>을 바인딩<하는 경우 및 바인딩 후 검색된 요소 원본의 구조적 간섭 감지와 관련된 문서화된 정책이 있어야 합니다. em>late-binding</em> Spliterator는 <Spliterator를 만들 때가 아니라 예상 크기에 대한 첫 번째 순회, 첫 번째 분할 또는 첫 번째 쿼리의 지점에서 요소의 원본에 바인딩합니다. 지연 바인딩</em>이 아닌 <>Spliterator는 생성 시점 또는 메서드의 첫 번째 호출 시점에 요소의 원본에 바인딩됩니다. 바인딩 전에 원본에 대한 수정 내용은 Spliterator가 트래버스될 때 반영됩니다. 분할기를 바인딩한 후에는 구조적 간섭이 감지되면 최대한 throw ConcurrentModificationException 해야 합니다. 이를 수행하는 분할기를 장애>조치(fail-fast</em)라고 <합니다>. Spliterator의 대량 순회 메서드(#forEachRemaining forEachRemaining())는 요소별로 확인하고 즉시 실패하는 대신 모든 요소가 트래버스된 후 구조적 간섭을 위해 순회 및 검사 최적화할 수 있습니다.

스플리터레이터는 메서드를 통해 #estimateSize 나머지 요소의 수를 예측할 수 있습니다. 특성 #SIZED에 반영된 것처럼 이 값은 성공적인 순회에서 발생할 수 있는 요소 수에 정확히 해당합니다. 그러나 정확히 알려지지 않은 경우에도 예상 값은 더 분할하거나 나머지 요소를 순차적으로 트래버스하는 것이 바람직한지 여부를 확인하는 것과 같이 원본에서 수행되는 작업에 여전히 유용할 수 있습니다.

병렬 알고리즘의 명백한 유틸리티에도 불구하고 분할기는 스레드로부터 안전하지 않을 것으로 예상됩니다. 대신 분할기를 사용하는 병렬 알고리즘을 구현하면 분할기가 한 번에 하나의 스레드에서만 사용되도록 해야 합니다. 이는 일반적으로 직렬 스레드 제한</em>을 통해>< 쉽게 얻을 수 있으며, 이는 종종 재귀 분해로 작동하는 일반적인 병렬 알고리즘의 자연스러운 결과입니다. 스레드 호출 #trySplit() 은 반환된 Spliterator를 다른 스레드에 넘겨줄 수 있으며, 이 스레드는 해당 Spliterator를 트래버스하거나 추가로 분할할 수 있습니다. 둘 이상의 스레드가 동일한 분할기에서 동시에 작동하는 경우 분할 및 순회 동작은 정의되지 않습니다. 원래 스레드가 처리를 위해 스플리터레이터를 다른 스레드로 전달하는 경우 특정 보장(예: 스플리터레이터의 #estimateSize()SIZED 정확도)이 통과가 시작되기 전에만 유효하기 때문에 요소와 함께 #tryAdvance(Consumer) tryAdvance()사용되기 전에 해당 핸드오프가 발생하는 것이 가장 좋습니다.

Spliterator 기본 하위 형식 특수화는 , OfLong longOfDouble double 값에 대해 OfInt int제공됩니다. 해당 래퍼 클래스의 Spliterator#tryAdvance(java.util.function.Consumer) 인스턴스에 대한 및 Spliterator#forEachRemaining(java.util.function.Consumer) 상자 기본값의 하위 형식 기본 구현입니다. 이러한 권투는 기본 특수화를 사용하여 얻은 성능 이점을 훼손할 수 있습니다. boxing을 방지하려면 해당 기본 기반 메서드를 사용해야 합니다. 예를 들어 및 Spliterator.OfInt#forEachRemaining(java.util.function.IntConsumer)Spliterator.OfInt#tryAdvance(java.util.function.IntConsumer)Spliterator.OfInt#forEachRemaining(java.util.function.Consumer)에 대한 기본 설정 Spliterator.OfInt#tryAdvance(java.util.function.Consumer) 에서 사용해야 합니다. boxing 기반 메서드 #tryAdvance tryAdvance() 를 사용하여 기본값을 트래버스하며 #forEachRemaining(java.util.function.Consumer) forEachRemaining() , 박스형 값으로 변환된 값이 발생하는 순서에는 영향을 주지 않습니다.

1.8에 추가되었습니다.

에 대한 Java 설명서입니다 java.util.Spliterator.

이 페이지의 일부는 만들고 공유하며 에 설명된 용어에 따라 사용되는 작업을 기반으로 수정됩니다.

속성

Comparator

이 Spliterator의 원본이 인 Comparator경우 는 #SORTED 해당 를 Comparator반환합니다.

ExactSizeIfKnown

이 Spliterator가 이면 를 반환 #estimateSize() 하는 편의 메서드이고, 그렇지 않으면 -1입니다#SIZED.

Handle

기본 Android 개체의 JNI 값을 가져옵니다.

(다음에서 상속됨 IJavaObject)
JniIdentityHashCode

java.lang.System.identityHashCode() 래핑된 instance 값을 반환합니다.

(다음에서 상속됨 IJavaPeerable)
JniManagedPeerState

관리되는 피어의 상태입니다.

(다음에서 상속됨 IJavaPeerable)
JniPeerMembers

멤버 액세스 및 호출 지원.

(다음에서 상속됨 IJavaPeerable)
PeerReference

JniObjectReference 래핑된 Java 개체 instance 의 를 반환합니다.

(다음에서 상속됨 IJavaPeerable)

메서드

Characteristics()

이 Spliterator 및 해당 요소의 특성 집합을 반환합니다.

Disposed()

instance 삭제되었을 때 호출됩니다.

(다음에서 상속됨 IJavaPeerable)
DisposeUnlessReferenced()

이 instance 대한 미해결 참조가 없으면 를 호출Dispose()합니다. 그렇지 않으면 아무 것도 수행하지 않습니다.

(다음에서 상속됨 IJavaPeerable)
EstimateSize()

순회에서 발생할 요소 수의 추정값을 #forEachRemaining 반환하거나 무한, 알 수 없음 또는 계산 비용이 너무 많이 드는 경우 를 반환 Long#MAX_VALUE 합니다.

Finalized()

instance 완료되면 호출됩니다.

(다음에서 상속됨 IJavaPeerable)
ForEachRemaining(IConsumer)

모든 요소가 처리되거나 작업이 예외를 throw할 때까지 현재 스레드에서 나머지 각 요소에 대해 지정된 작업을 순차적으로 수행합니다.

HasCharacteristics(Int32)

이 Spliterator의 #characteristics 에 지정된 특성이 모두 포함되어 있으면 를 반환 true 합니다.

SetJniIdentityHashCode(Int32)

에서 반환 JniIdentityHashCode된 값을 설정합니다.

(다음에서 상속됨 IJavaPeerable)
SetJniManagedPeerState(JniManagedPeerStates)

원본의 요소를 트래버스하고 분할하기 위한 개체입니다.

(다음에서 상속됨 IJavaPeerable)
SetPeerReference(JniObjectReference)

에서 반환 PeerReference된 값을 설정합니다.

(다음에서 상속됨 IJavaPeerable)
TryAdvance(IConsumer)

나머지 요소가 있는 경우 는 지정된 작업을 수행하고 를 반환하고 true, 그렇지 않으면 를 반환합니다 false.

TrySplit()

이 분할자를 분할할 수 있는 경우 요소를 포함하는 Spliterator를 반환합니다. 그러면 이 메서드에서 반환될 때 이 Spliterator에서 다루지 않습니다.

UnregisterFromRuntime()

런타임이 이후 Java.Interop.JniRuntime+JniValueManager.PeekValue 호출에서 반환되지 않도록 이 instance 등록을 취소합니다.

(다음에서 상속됨 IJavaPeerable)

확장 메서드

JavaCast<TResult>(IJavaObject)

Android 런타임 확인 형식 변환을 수행합니다.

JavaCast<TResult>(IJavaObject)

원본의 요소를 트래버스하고 분할하기 위한 개체입니다.

GetJniTypeName(IJavaPeerable)

원본의 요소를 트래버스하고 분할하기 위한 개체입니다.

적용 대상